我应该写一个这里指定的程序:
Input The input will consist of a series of pairs of integers a and b,separated by a space, one pair of integers per line. you should read the input until EOF. Output For each pair of input integers a and b you should output the sum of a and b in one line,and with one line of output for each line in input. Sample Input 1 5 7 2 Sample Output 6 9我写这个:
#includemain() { 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)来结束输入?有没有更好的方法来编写这段代码?
答案 0 :(得分:0)
您的代码不应依赖EOF
被getchar()
击中。改变这个:
do {
scanf("%d %d", &a, &b);
...
} while((c=getchar())!=EOF);
为:
do {
if (scanf("%d %d", &a, &b) != 2)
break;
...
} while((c = getchar()) != EOF);
或者,您可以完全省略getchar()
来电:
while (scanf("%d %d", &a, &b) == 2) {
...
}
答案 1 :(得分: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]);
}
答案 2 :(得分:0)
当scanf()
读取您的输入行时,它会读取这两个数字,但它会在输入流中留下终止该行的换行符。然后当getchar()
读取下一个字符时,它会读取该换行符。由于换行不是EOF,它返回循环的开头。
现在scanf()
再次运行,它会看到您在换行符后输入的EOF。它返回时不更新变量。然后再次调用getchar()
,你必须输入另一个EOF来获取它。