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