while(cin)和while(cin>> num)之间有什么区别

时间:2013-10-20 21:33:47

标签: c++ iostream

以下两个循环和每个循环何时停止有什么区别?

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
    int x,y;
    while(cin >> x){
        // code
    }
    while(cin){
        cin >> y;
        //code
    }
    return 0;
}

4 个答案:

答案 0 :(得分:23)

让我们独立看看这些:

while(cin >> x) {
    // code
}

这个循环直观地表示“继续将值从cin读入x,只要可以读取值,就继续循环。”只要读取的值不是int,或者只要cin关闭,循环就会终止。这意味着循环仅在x有效时执行。

另一方面,请考虑这个循环:

while(cin){
    cin >> y;
    //code
}

声明while (cin)表示“当cin上的所有先前操作都成功时,继续循环。”一旦我们进入循环,我们将尝试将值读入y。这可能会成功,也可能会失败。但是,无论是哪种情况,循环都将继续执行。这意味着一旦输入了无效数据或者没有更多数据需要读取,循环将使用旧值y再次执行,因此您将需要多一次循环迭代。

你肯定更喜欢这个循环的第一个版本到第二个版本。除非有有效数据,否则它永远不会执行迭代。

希望这有帮助!

答案 1 :(得分:3)

不同之处在于,如果cin >> whatever的计算结果为false,则第二个版本仍会运行其余的循环。

我们假设cin >> whatever失败。会发生什么?

while(cin >> x){
    // code that DOESN'T RUN
}

while(cin){
    cin >> y;
    //code that DOES RUN, even if the previous read failed
}

答案 2 :(得分:2)

while(cin >> x){
    // code
}

这会读取整数,直到遇到非整数,EOF或其他流错误。无论何时在循环中使用x,您都知道它已成功读取。

while(cin){
    cin >> y;
    //code
}

这会读取整数,直到遇到非整数,EOF或其他流错误。但是,仅在读取整数之前检查流。在循环中使用y时,无法保证它已成功读取。

答案 3 :(得分:0)

cin >> x会将输入值存储到x。

至于while(cin)std::cin将返回一个关于是否设置了错误标志的布尔值。因此,只要std::cin内部没有设置错误标志,您将继续执行while循环。如果找到end of file字符,或者它无法读取并存储到值中,则可以设置错误标志。