0

ここで指定されたプログラムを書くことになっています:

入力

入力は、スペースで区切られた一連の整数 a と b のペアで構成され、1 行に 1 つの整数のペアが含まれます。EOF まで入力を読み取る必要があります。
出力

入力整数 a と b の各ペアに対して、a と b の合計を 1 行に出力し、入力の各行に対して 1 行の出力を出力する必要があります。
サンプル入力

1 5
7 2

サンプル出力

6
9

私はこれを書きます:

     #含む

 main() {
 int a, b;
 int sum[100];
 int i,j;
 char c;

 for(i=0; i<100; i++) sum[i]=0;

 i=0;
 do {
    scanf("%d %d", &a, &b);
sum[i]=a+b;
    i++;
  } while((c=getchar())!=EOF);

 for(j=0; j<i-1; j++) printf("%d\n", sum[j]);
 }

私にとって奇妙なのは、入力を終了するために CTRL+D(EOF) を 2 回押す必要があるのはなぜですか?このコードを記述するより良い方法はありますか?

4

3 に答える 3

0

最初の CTRL-D は scanf を壊します。その後、プログラムは getchar で待機します。scanf からの出力をチェックすると、チェックは 1 つしかありません。

#include <stdio.h>


main() {
    int a, b;
    int sum[100];
    int i,j;
    char c;

    for(i=0; i<100; i++) sum[i]=0;

    i=0;
    while ( 2==scanf("%d %d", &a, &b))
    {   
        sum[i]=a+b;
        i++;
    }   

    for(j=0; j<i-1; j++) printf("%d\n", sum[j]);
}  
于 2013-10-05T11:08:42.837 に答える
0

scanf()入力行を読み取ると、2 つの数値が読み取られますが、入力ストリームの行を終了する改行が残ります。次にgetchar()、次の文字を読み取るときに、その改行を読み取ります。改行は EOF ではないので、ループの先頭に戻ります。

scanf()再び実行すると、改行の後に入力した EOF が表示されます。変数を更新せずに戻ります。その後getchar()、再び呼び出され、それを取得するには別の EOF を入力する必要があります。

于 2013-10-05T11:09:09.820 に答える