首页 > 解决方案 > 如果我在输入需要整数时输入浮点数,它会更新下一个浮点数值。为什么会这样?

问题描述

我是 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时所期望的整数时,

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

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

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

标签: c++floating-pointinteger

解决方案


您正在将 float 传递给int. cin一看到“。”就停止阅读。剩下的数字 7 自动作为 next 的输入cin

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

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

这将是

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

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

编辑,看在皮特的份上:

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

推荐阅读