【问题标题】:Why are there different values for input?为什么输入有不同的值?
【发布时间】:2014-01-21 06:44:34
【问题描述】:

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

double x;

x = cin.get();

cout << x << endl;

返回输入字符的字符值,但是

    double x;

    cin >> x;

    cout << x << endl;

为 'q' 返回一个随机值

【问题讨论】:

    标签: c++ io cin


    【解决方案1】:

    就像你说的,std::istream::get 从输入流中得到一个字符。例如,如果您输入数字 1 作为输入,它会返回字符 '1' 的 ASCII 代码,即十进制 49(在使用 ASCII 的系统上,这几乎是所有内容)。

    当您使用输入运算符&gt;&gt; 时,该函数会读取输入并将输入解析为正确的格式。因此,如果您将&gt;&gt;double 变量一起使用,并输入1,您将在变量中获得值1.0

    您遇到的问题是当输入运算符&gt;&gt; 无法正确解析输入时,例如当您输入字母而不是数字时,输入运算符将失败并且不会设置变量,这意味着您打印一个未初始化的变量,它是未定义的行为。请注意,这种行为在 C++11 中发生了变化(参见例如 this old answer of mine)。

    您必须记住,流对象可以用作条件,并且输入运算符函数返回有问题的流。所以你可以做例如

    if (std::cin >> x)
        std::cout << x << '\n';
    else
        std::cout << "Error in input\n";
    

    【讨论】:

    【解决方案2】:

    std::get() 将输入读取为 unformatted 整数值,因此它可以成功,因为它不必将读取的内容格式化为任何 特定 类型。但是operator&gt;&gt; 将输入读取为 格式化 数据,因此它必须将读取的内容格式化为给定类型。由于在您的情况下,输入 'q' 不适合 double,因此格式化失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 2021-05-06
      • 2020-10-01
      • 2016-07-01
      • 1970-01-01
      相关资源
      最近更新 更多