-1

我知道我可以使用while (std::cin >> str).

当我尝试以下作为等效 for 循环时,我在 Visual C++ 2010 中收到一个无用的错误。为什么这在技术上不正确?

    for (true; true; std::cin>>str) 
    {
         // Get input forever 
    }
4

4 回答 4

7

我猜你的错误是使用未初始化变量的影响,str. 原因是 for 循环中的最后一个参数直到循环完成第一次迭代后才会执行。

此外,如果您需要无限循环,您可以执行此操作或许多其他循环设置:

for ( ; ; ) {
    std::cin >> str;
    // Do your stuff
}
于 2012-09-13T04:18:30.213 回答
6

相当于

for(;std::cin>>str;) {}
于 2012-09-13T04:14:47.407 回答
5

等效的 for 循环应该是

for (; std::cin >> str; ) {}

因为 for 循环中的 seconde 语句告诉它何时应该停止。当输入结束时,std::cin >> str返回 EOF 并停止循环。

于 2012-09-13T04:21:51.220 回答
0

这不是 for 的有用用法。For 意味着迭代,而不是循环,直到结果出现,就像 while 一样。

for(;std::cin>>str;) {}

是您正在寻找的东西(如上面发布的)。但是,真正的问题是为什么要添加额外的样板代码和错误风险而不是 while?

此外,我通常不喜欢在我的条件测试中(在 for 或 while 中)赋值,因为意外的后果可能会做一些奇怪的事情。虽然这种情况可能很好,但我更喜欢:

while(true) {
    cin >> str;

    if(....) {
        break;
    }
}

好处:这是非常清楚的,只有你明确编程的东西才能打破循环。

缺点:这需要更多的代码行,并且有一个无限循环,可能会在代码分析工具中引发错误。

于 2012-09-13T04:29:32.110 回答