cho*_*ure 3 c++ gcc iostream cin
我正在处理以下代码.
#include <iostream>
int main()
{
std::cout << "Enter numbers separated by whitespace (use -1 to quit): ";
int i = 0;
while (i != -1) {
std::cin >> i;
std::cout << "You entered " << i << '\n';
}
}
Run Code Online (Sandbox Code Playgroud)
我知道使用while (std::cin >> i)
本来会更好,但我不明白具体的情况.如果我提供无效输入,则循环变为无限,因为输入流进入故障位状态.我的问题是输入变量会发生什么i
?就我而言,无论先前输入的值如何,它都变为0.输入无效后为什么会变为0?这是预定义的行为吗?
你得到零,因为你有一个pre-C++ 11编译器.在失败时保持输入值不变是最新标准中的新功能.旧标准要求如下:
如果提取失败,则将零写入值并设置failbit.如果提取导致值太大或太小而不适合值,则写入std :: numeric_limits :: max()或std :: numeric_limits :: min()并设置failbit标志.
(来源)
对于gcc,您需要传递-std=c++11
给编译器以使用新行为.