我有以下代码
//in main
int x;
while ( cin>>x ){
// code goes here
}
现在,我知道这个循环执行,直到x
的读取失败,这在发生类型不匹配时发生
因此,按char
可以让我走出循环,x
的类型为int
,char
将无法从输入流中读取。
但是问题在于空格,因为它们也不是int
所以为什么循环不会在我按下输入或空格时结束?
答案 0 :(得分:3)
根据The C++ Programming Language Special Edition,$ 21.9建议[5]:
请记住默认情况下>>跳过空白; §21.3.2。
并且在$ 21.3.2中:
空格被定义为标准 通过调用isspace()定义C空格(空白,制表符,换行符,换页符和回车符) 在(§20.4.2)中。
答案 1 :(得分:1)
@jrok的评论提供了答案。
因此,只要输入是空白,则cin等待可以表示所请求类型的输入。如果流中存在无效字符,或者在消耗了有效的非空白字符后,它将停止 - 该字符为空格。
您可以逐行阅读以检测空输入:
std::string line
while(getline(cin, line)) {
// Note: Omitting the case where the line contains spaces, only.
if(line.empty()) {
// No input;
break;
}
else {
// Parse and process the line.
}
}
注意:如果禁用跳过空格,则行为会更改。