为什么不能(true; true; std :: cin>> str)工作?

时间:2012-09-13 04:12:07

标签: c++

我知道我可以使用while (std::cin >> str)从控制台输入文字。

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

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

4 个答案:

答案 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;
    }
}

上行:这是非常明确的,只有你明确编程的东西才能打破循环。

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