0

わかりましたので、各行の単語と文字の量を正常に計算する入力ファイルがあります。以下のコードを使用して行末に到達すると、ループを終了し、最初の行のみを読み取ります。プログラムを続行するために次の入力行に移動するにはどうすればよいですか?

編集:各行を個別に解析する必要があるため、EOFを使用できません

while( (c = getchar()) != '\n')
4

4 に答える 4

5

に変更'\n'EOFます。ファイルの最後まで読みたい場合は、行の最後まで読んでいます (EOF は、ファイルの最後の文字に対応する stdio.h のマクロです)。

免責事項: メソッドのセキュリティについては主張しません。

于 2011-01-28T23:34:29.247 に答える
3

'\n' は改行 (改行) 文字であるため、最初の行の終わりに到達するとループは終了します。ファイルの終わりは、ファイルの終わり (EOF) 文字によってマークされます。getchar() 関数を含む cstdio (または stdio.h) には EOF 定数が定義されているため、while 行を次のように変更します。

while( (c = getchar()) != EOF)
于 2011-01-28T23:38:32.427 に答える
0

ページからman:「ストリームから次の文字を読み取り、int への unsigned char キャストとして、またはファイルの終わりまたはエラーの EOF として返します。」 EOFファイルの終わりを示すこの関数および関連する関数を返すためのマクロ (多くの場合 -1) です。これが返されているかどうかを確認する必要があります。getcは符号付き int を返しますが、有効な値は int にキャストされた unsigned char であることに注意してください。c が signed char の場合はどうなりますか。

于 2011-01-28T23:40:45.007 に答える
0

\ n文字は、実際には 2 つの文字 (13 番目のバイト + 10 番目のバイト) の 2 バイトの組み合わせです。次のようなものを試すことができます。

int c2=getchar(),c1;
while(1)
{
  c1=c2;
  c2=getchar();
  if(c1==EOF)
    break;
  if(c1==(char)13 && c2==(char)10)
    break;

  /*use c1 as the input character*/
}

これは、2 つの入力文字が適切なカプレット (13,10) になるかどうかをテストする必要があります。

于 2011-01-29T01:09:41.947 に答える