我知道我可以使用while (std::cin >> str)
从控制台输入文字。
当我尝试以下作为循环的等价物时,我在Visual C ++ 2010中得到了一个无用的错误。为什么这在技术上不正确?
for (true; true; std::cin>>str)
{
// Get input forever
}
答案 0 :(得分:7)
我猜测你的错误是使用未初始化的变量str
的结果。原因是因为for循环中的最后一个参数在循环完成第一次迭代之后才会执行。
此外,如果您需要无限循环,您可以执行此操作或其他许多循环设置:
for ( ; ; ) {
std::cin >> str;
// Do your stuff
}
答案 1 :(得分:6)
相当于
for(;std::cin>>str;) {}
答案 2 :(得分:5)
循环的等价物应为
for (; std::cin >> str; ) {}
因为for循环中的第二个语句告诉它何时应该停止。当输入结束时,std::cin >> str
返回EOF并停止循环。
答案 3 :(得分:0)
这不是一个有用的用法。 For意味着迭代,而不是循环,直到结果发生为止。
for(; std :: cin>> str;){}
是您正在寻找的(如上所述)。但是,真正的问题是为什么要添加额外的样板代码和错误风险而不是while?
另外,我通常不喜欢在条件测试中(在for或while中)进行赋值,因为意想不到的后果可能会造成奇怪的事情。虽然这种情况可能很好,但我更喜欢:
while(true) {
cin >> str;
if(....) {
break;
}
}
上行:这是非常明确的,只有你明确编程的东西才能打破循环。
下行:这需要更多的代码行,并且有一个无限循环,可能会在代码分析工具中出错。