confused with cin in C++

J

John Ruan

This is a small program in C++. I want to try to type in real number instead
of integer to see how the program runs.
And I am confused. If I input integer for both variables, the program runs
fine. But if I input a real number for the height (like 68.2), the second
cin doesn't work at all!!

I expected any real number will be truncated and that is my only
expectation. But it seems that there are other problems. Can anybody try it?



#include <iostream>
using namespace std;

int main(void)
{
const double INCHES_PER_METER = 39.37;
const double POUNDS_PER_KG = 2.24;

int height;
int weight;

cout << "METRIC CONVERTER" << endl << endl ;
cout << "Enter your height in inches " ;
cout << "(No fractions, please!) : " ;
cin >> height;

cout << "Enter your weight in pounds" ;
cout << "(No fractions, please!)" ;
cin >> weight;
cout << endl ;

double metric_height = height/INCHES_PER_METER;

double metric_weight = weight/POUNDS_PER_KG;


cout << "Your height is " << metric_height << " meters." << endl;
cout << "Your weight is " << metric_weight << " kilograms." << endl;

return 0;
}
 
C

Christopher

This is a small program in C++. I want to try to type in real number instead
of integer to see how the program runs.
And I am confused. If I input integer for both variables, the program runs
fine. But if I input a real number for the height (like 68.2), the second
cin doesn't work at all!!

I expected any real number will be truncated and that is my only
expectation. But it seems that there are other problems. Can anybody try it?

#include <iostream>
using namespace std;

int main(void)
{
const double INCHES_PER_METER = 39.37;
const double POUNDS_PER_KG = 2.24;

int height;
int weight;

cout << "METRIC CONVERTER" << endl << endl ;
cout << "Enter your height in inches " ;
cout << "(No fractions, please!) : " ;
cin >> height;

cout << "Enter your weight in pounds" ;
cout << "(No fractions, please!)" ;
cin >> weight;
cout << endl ;

double metric_height = height/INCHES_PER_METER;

double metric_weight = weight/POUNDS_PER_KG;

cout << "Your height is " << metric_height << " meters." << endl;
cout << "Your weight is " << metric_weight << " kilograms." << endl;

return 0;

}

Your assumption is incorrect. If a stream is unable to convert to the
requested type it sets an error bit. I don't remember which one, but I
believe you can check it with cin.bad(). I would of course refresh my
memory by reading up on streams and stream error handling, but I'll
leave that to you.

The same rules apply to other streams.

That is how you can check whether the user typed in a value of the
type you were expecting and then tell them they aren't following
instructions and to try again.
 
B

Bo Persson

John said:
This is a small program in C++. I want to try to type in real
number instead of integer to see how the program runs.
And I am confused. If I input integer for both variables, the
program runs fine. But if I input a real number for the height
(like 68.2), the second cin doesn't work at all!!

The input is originally text, which is scanned for digits that can be
part of an integer. The first input reads a 6 and an 8, and gives you
the number 68.

When you try to read a second integer, the first character found is a
period, which is an error for integers. You get no number.



Bo Persson
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,480
Members
44,900
Latest member
Nell636132

Latest Threads

Top