繁体   English   中英

如果我在输入期望 integer 数字时输入浮点数,它会更新下一个浮点数值。 为什么会这样?

[英]If I input a float number when input is expecting an integer number, it updates the next float number value. Why does that happen?

我是 C++ 编程的新手。 所以,我只是在尝试一些基本的 C++ 编码,我编写了以下程序:

#include <iostream>

using namespace std;

int main()
{
    int number1;
    float number2;

    cout << "Enter number1 (integer)\r\n";
    cin >> number1;
    cout << "Enter number2 (float)\r\n";
    cin >> number2;

    cout << "Number1 is "<<number1<<"Number2 is "<<number2<<endl;
    return 0;
}

当我执行上面的代码并错误地给出一个像“20.7”这样的数字而不是它在提示输入数字1时所期望的integer时,

第二个 cin 语句被跳过,数字 1 打印为 20,数字 2 打印为 0.7。

这是为什么? 我的期望是第一个 cin 应该将 20.7 设为 20 并将其存储在 number1 中,并且不应跳过第二个 cin 并提示我输入。

这是错误的期望吗? 为什么会这样?

您正在将 float 传递给int cin一看到 '.' 就停止读取。 剩下的数字 7 会自动作为下一个cin的输入。

如果您认为这些值可能与预期类型不匹配,您可能希望在每次读取后刷新输入缓冲区。

std::cin.clear(); std::cin.ignore(100,'\n')

这将是

std::cin.clear();
std::cin.ignore(whatever_num,'\n');

更多信息可以在这里这里找到

编辑,看在皮特的份上:

  1. >> Stream 运营商是罪魁祸首。
  2. 所有输入都是文本。
  3. 在最好的情况下,将输入读取为 TEXT,然后解析/做任何你想做的事情。
  4. 避免使用 cin.clear() 和 cin.ignore()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM