c++中while循环条件中使用std::cin的行为
Behaviour of std::cin when used in while loop condition C++
下面是一个小程序,它将刚刚输入的整数打印到屏幕上。
#include <iostream>
int main(int argc, char *argv[])
{
int n;
while(std::cin>>n)
{
std::cout<<"You typed "<<n<<std::endl;
}
return 0;
}
现在当我输入整数时,程序正常工作。但是,如果我输入像10.8这样的浮点数,程序将在屏幕上显示10(因为它将浮点数转换为整数),然后程序退出。为什么会发生这种情况?下面给出了一个示例终端输出。
Desktop: ./a.out
4
You typed 4
-9
You typed -9
10.8
You typed 10
Desktop:
在"You键入10"行后,字符"。"留在小溪里。"当它试图将其读入整数时,它失败了,因此它将流置于坏状态。
由于流处于坏状态,你的循环条件失败,你退出循环。
(具体来说,它设置了"坏"位,我想,但我已经处理了太长时间了,我不确定——如果你需要那个级别的细节,请检查文档)
旁白:注意,如果你试图再次阅读,字符"。8" 将仍然留在流中,并且您将再次失败。这是一个常见的I/O错误。
不应该有任何类型转换。
10.8被读取为10
,然后.
导致无法将文本解释为整数,导致设置failbit
。这将导致循环退出。
如果您希望处理10.8
,请阅读double
,并自己进行强制转换。
相关文章:
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- istream std::cin如何修改自定义istream缓冲区
- 在 std::getline 和 std::cin 期间卡在循环中
- 为什么我必须在包含后写 std::cin <iostream>?
- std::cin 从控制台获取两种不同的变量类型,'storing'以后使用第二种类型?
- C++ 限制或使用户输入不可见 (std::cin)
- 为什么 std::cin 不提示用户输入?
- 为什么从 std::cin 读取输入后右括号字符的值有时不是")"?
- 吃完 EOF 后重复使用 std::cin
- 为什么不能通过在错误输入后设置 std::cin.clear() 来使用 std::cin?
- 当使用 std::CIN 输入结构时,它会出错
- std::cin 在读取 EOF 并清除后不再读取
- 使用 (cin) 用户输入将其粘贴到 std::system 中,并在另一个终端中运行带有输入的命令
- 如何使 std::istream 从键盘获取输入(如 std::cin)?
- 如何将 std::cin 作为函数的参数传递?
- std::cin不接受输入
- std::cin >>上的参数无效
- 在C++收到此错误,"std:cin.std 中的'运算符>>不匹配"
- std::cin >> std::string 是如何实现的?