0

我应该写一个在这里指定的程序:

输入

输入将包含一系列整数对 a 和 b,由空格分隔,每行一对整数。您应该阅读输入直到 EOF。
输出

对于每一对输入整数 a 和 b,您应该在一行中输出 a 和 b 的总和,并且输入中的每一行输出一行。
样本输入

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) 来结束输入?有没有更好的方法来编写这段代码?

4

3 回答 3

0

您的代码不应依赖于EOFgetchar(). 改变这个:

do {
    scanf("%d %d", &a, &b);
    ...
} while((c=getchar())!=EOF);

到:

do {
    if (scanf("%d %d", &a, &b) != 2)
        break;
    ...
} while((c = getchar()) != EOF);

或者,您可以完全省略getchar()call :

while (scanf("%d %d", &a, &b) == 2) {
    ...
} 
于 2013-10-05T11:05:17.507 回答
0

你的第一个 CTRL-D 打破了 scanf。之后,您的程序将在 getchar 中等待。如果您检查 scanf 的输出,则只有一项检查。

#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()读取您的输入行时,它会读取两个数字,但会留下终止输入流中该行的换行符。然后当getchar()读取下一个字符时,它会读取该换行符。由于换行符不是 EOF,它返回到循环的开头。

现在scanf()再次运行,它会看到您在换行符之后键入的 EOF。它返回而不更新变量。然后getchar()再次调用,您必须键入另一个 EOF 才能获取它。

于 2013-10-05T11:09:09.820 回答