为什么输入'q'(或任何字符)
double x;
x = cin.get();
cout << x << endl;
返回输入字符的char值,但
double x;
cin >> x;
cout << x << endl;
返回'q'的随机值
答案 0 :(得分:4)
就像你说的那样,std::istream::get
从输入流中获取字符。例如,如果输入数字1
作为输入,则返回字符'1'
的ASCII代码,其为49
十进制(在使用ASCII的系统上,几乎是所有内容)。
当您使用函数读取的输入运算符>>
并且将输入解析为正确的格式时。因此,如果您将>>
与double
变量一起使用,并输入1
,您将在变量中获得值1.0
。
您遇到的问题是,当输入操作符>>
无法正确解析输入时,例如输入字母而不是数字时,输入操作符将失败且不设置变量,意味着您打印一个未初始化的变量未定义的行为。请注意,此行为在C ++ 11中已更改(请参阅例如this old answer of mine)。
您必须记住,流对象可以用作条件,输入操作符函数可以返回有问题的流。所以你可以这样做。
if (std::cin >> x)
std::cout << x << '\n';
else
std::cout << "Error in input\n";
答案 1 :(得分:2)
std::get()
将输入读取为无格式整数值,因此它成功,因为它不必格式化它读入任何特定类型的内容。但operator>>
将输入读取为格式化的数据,因此必须将其读取的内容格式化为给定类型。因为在您的情况下,输入'q'
不适合double
,格式化失败。