scanf 函数的返回值为其成功读入的参数的个数,当在读取文件时到达文件末尾导致无法读取,产生读入失败,scanf 函数会返回-1而不是0.
于是,对于多点测试的第一种输入模式就可以使用 while…EOF
while(scanf("%d", &n) != EOF){
...
}
对于读入字符串
while(scanf("%s",str) != EOF){
...
}
while(gets(str) != NULL){
...
}
当输入要求满足某那种条件时就停止输入,那么可以使用 while…break
while(scanf("%d %d", &a, &b) != EOF){
if (a==0 || b=0) break;
}
while(scanf("%d %d", &a, &b), a || b){
...
}
第三种情况是如果给出测试数据的组数,那么就可以使用 while(T–)
scanf("%d", &T);
while(T--){
scanf("%d", &a);
}
在 while(T–) 类型下,输出可能要求两组输出数据之间有一个空行,最后一组数据后面没有空行
int T, n, a
scanf("%d", &T);
while(T--){
int sum = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d",&a);
sum = sum + a;
}
printf("%d\n", sum);
if(T > 0) printf("\n);
}
顺便一提的是,与之类似的还有一种要求是:输出一行n个整数,每两个整数之间用空格隔开,最后一个整数后面不允许加上空格。
for(int i = 0; i < n; i++){
printf("%d", a[i]);
if( i< n-1) printf(" ");
else printf("\n");
}