0

私はファイルの終わりについて本当に混乱しています。無限ループを実行していると仮定します。そして、このループでは、整数を入力として受け取り、ファイルの終わりが見つかるまでそれを処理しています。しかし、入力がファイルの終わりであるかどうかを確認しますか?そして、どうすればループを壊すことができますか?

私はWindowsを使用しているので、EOFにはCTRL+Zと入力しています。

#include<iostream>
#include<cstdio>
using namespace std;

int main(void)
{
  int n;
  while(true)
  {
    cin >> n;
    if(n==EOF)break;
    cout << n << endl;
  }
  return 0;
}

このコードを実行してCTRL+zと入力すると、最後に入力したものだけが無限に出力されます。

4

1 に答える 1

6

1)それはあなたがファイルの終わりをチェックする方法ではありません。operator>>EOF値を返すことをどこで読みましたか?

過去のファイルの終わりを読み込もうとしたかどうかを確認する正しい方法は、これif(cin.eof())です。ただし、次の理由から、これを行わないでください。

2)ファイルの終わりをチェックするべきではありません。むしろ、「最後の入力操作は正しく機能しましたか?」を確認する必要があります。

このような:

#include<iostream>
#include<cstdio>
using namespace std;

int main(void)
{
  int n;
  while(cin >> n)
  {
    cout << n << endl;
  }
  return 0;
}


参照EOFが最後の行を繰り返すまでテキストファイルから読み取る

于 2012-07-12T20:30:48.137 に答える