这有什么问题?另外,我必须使用scanf()
。它应该读取任何整数并对它们求和,循环将在输入0
时停止。
main (void){
int a;
int r=0;
while(scanf(" %d",&a)){
r=r+a;
}
printf("the sum is %d\n",r);
return 0;
}
答案 0 :(得分:4)
引自man
这些函数返回分配的输入项数。这个 可 如果匹配失败,则少于提供的数量,甚至为零 URE。零表示虽然有可用的输入,但没有收敛 - 分配了sions;通常这是由于输入字符无效, 例如'%d'转换的字母字符。
值EOF是 如果在任何转换(如结束)之前发生输入故障,则返回 发生了文件。如果转换后发生错误或文件结束 开始时,成功完成的转换次数是 返回。
所以,这几乎解释了scanf()
返回的内容。
您可以通过添加( 1 == scanf("%d", &a) && a != 0 )
作为while循环中的条件来解决问题,例如
int main (void)
{
int a;
int r=0;
while( 1 == scanf("%d", &a) && a != 0 )
{
r=r+a;
}
printf("the sum is %d\n",r);
return 0;
}
另请注意,您必须将主要类型指定为int main()
。
我还想补充说,当您输入'c'
(或字符串)这样的字符时,循环将结束,并且它将显示您在输入字符之前输入的所有数字的总和。
答案 1 :(得分:1)
scanf()
不会返回写入变量的内容。它返回成功填充的项的总数。
修改强>:
使用fgets()
阅读stdin
,然后使用sscanf()
获取整数,您可以更好,您可以针对0
进行检查。
#define BUFF_SIZE 1024
int main (void)
{
int a;
int r = 0;
char buffer[BUFF_SIZE] = {0};
while(1) {
fgets(buffer, sizeof buffer, stdin);
sscanf(buffer, "%d", &a);
if(!a)
break;
r = r + a;
}
printf("the sum is %d\n", r);
return 0;
}