c++ - 如果我在输入需要整数时输入浮点数,它会更新下一个浮点数值。为什么会这样?
问题描述
我是 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 并提示我输入。
这是错误的期望吗?为什么会这样?
解决方案
您正在将 float 传递给int
. cin
一看到“。”就停止阅读。剩下的数字 7 自动作为 next 的输入cin
。
如果您认为这些值可能与预期类型不匹配,您可能希望在每次读取后刷新输入缓冲区。
std::cin.clear();
和std::cin.ignore(100,'\n')
。
这将是
std::cin.clear();
std::cin.ignore(whatever_num,'\n');
编辑,看在皮特的份上:
>>
流运营商是罪魁祸首。- 所有输入都是文本。
- 在最好的情况下,将输入读取为 TEXT,然后解析/做任何你想做的事情。
- 避免使用 cin.clear() 和 cin.ignore()。
推荐阅读
- sas - SAS中的双向方差分析
- discord - 如何在没有命令提示符的情况下保持 python discord bot 在线运行?
- php - 使用 laravel yield() 函数有什么假设?
- python - 在图像中找到矩形并提取其中的文本以将其保存为新图像
- apache - 重写 url - apache - htaccess
- django - 运行配置错误:请在 PyCharm 中指定脚本名称
- jpa - @Stateless 和 @Asynchronous EJB 之间的 JPA 事务处理
- html - 更改响应背景颜色的文本颜色
- python - Pandas 数据框获取列名和 value_counts
- python - 将 Pandas 数据框转换为字典