为什么输入值不同?

时间:2014-01-21 06:44:35

标签: c++ io cin

为什么输入'q'(或任何字符)

double x;

x = cin.get();

cout << x << endl;

返回输入字符的char值,但

    double x;

    cin >> x;

    cout << x << endl;

返回'q'的随机值

2 个答案:

答案 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,格式化失败。