1. ホーム
  2. c++

[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)

2022-01-27 19:04:07

質問

次の2つのループの違いと、それぞれのループが停止するタイミングは?

#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;
}

解決方法は?

これらを個別に見てみましょう。

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

このループは、直感的には cinx でない値が読み込まれるとすぐに、ループを開始します。 int または cin が閉じられると、ループは終了します。つまり、このループが実行されるのは x が有効であることを示します。

一方、このループを考えてみましょう。

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

ステートメント while (cin) に対するこれまでのすべての操作が完了するまでの間」という意味です。 cin ループに入ったら、値を y . これは成功するかもしれませんし、失敗するかもしれません。しかし、どちらであっても、ループは実行され続けます。つまり、無効なデータが入力されたり、読み込むべきデータがなくなったりすると、ループはもう一度、古い値である y そのため、必要以上にループを繰り返すことになります。

このループの最初のバージョンは、2番目のバージョンよりも絶対に好きなはずです。 有効なデータがない限り、決して繰り返しを実行しないからです。

お役に立てれば幸いです。