【发布时间】:2017-12-24 02:18:06
【问题描述】:
以下程序来自谷歌教程,非常简单,除非我输入十进制数。
#include <iostream>
using namespace std;
int main() {
int input_var = 0;
do {
cout << "Enter a number (-1 = quit): ";
if (!(cin >> input_var)) {
cout << "You entered a non-numeric. Exiting..." << endl;
break;
}
if (input_var != -1) {
cout << "You entered " << input_var << endl;
}
} while (input_var != -1);
cout << "All done." << endl;
return 0;
}
如果输入是 int(不是 -1),则输出:
Enter a number (-1 = quit): 5
You entered 5
Enter a number (-1 = quit):
如果是非数字:
Enter a number (-1 = quit): p
You entered a non-numeric. Exiting...
All done.
这正是它应该如何工作的,但如果它是一个十进制数:
Enter a number (-1 = quit): 5.9
You entered 5
Enter a number (-1 = quit): You entered a non-numeric. Exiting...
All done.
我知道如果将double 或float 分配给int 并且在这种情况下它第一次输出截断的十进制数并且cin 不会变成false,那么c++ 的行为第二次迭代它甚至不接受输入。
如果它从一开始就没有接受它,或者它只是截断小数并且行为与输入 int 一样,我会理解,但为什么它在第一个循环中的行为不同并且不同第二个循环?
【问题讨论】:
-
iostreams 输入的一个很好的默认值是使用
getline,来自<string>标头。 -
“十进制数”是什么意思?你是说base-10吗?因为这是唯一真正的意义。
-
@EJP 也表示“用小数点表示的非整数值”。这是我的问题中标签“十进制”定义的一部分。很抱歉有歧义。
标签: c++ if-statement int decimal cin