如何在scanf循环中累加所有输入数字(包含终止循环的负数)
嘿,我一眼就瞅出问题所在啦!你的do-while循环逻辑顺序搞反了,导致终止用的负数没机会被加到总和里。
咱们来拆解下原代码的执行流程:
- 先读第一个数字,比如
1,加到总和z里; - 然后读下一个数字
2,加到z里; - 接着读负数
-3,这时候直接判断x >= 0不成立,循环直接退出,这个-3根本没执行z += x的操作,当然没被算进去啦!
最简单的修改方式就是调整循环里的操作顺序,先读入数字,先累加,再判断是否继续循环。这样不管输入的是正数还是负数,都会先被加到总和里,再决定要不要终止。修改后的代码如下:
#include <stdio.h> int main() { // 这里建议显式写int,符合C标准,避免编译器警告 int z, x; printf("Enter a number:\n"); z = 0; do { scanf("%d", &x); // 先读取输入的数字 z += x; // 不管正负,先加到总和里 } while (x >= 0); // 非负就继续循环,负数就终止 printf("Sum = %d ", z); return 0; }
举个例子,输入1 2 -3的话,流程就变成:
- 读入
1,z变成1,判断1≥0成立,继续; - 读入
2,z变成3,判断2≥0成立,继续; - 读入
-3,z变成0,判断-3≥0不成立,循环结束; - 输出总和0,完美包含了那个负数的结果!
另外还有个小细节:原代码里的main()最好写成int main(),这是C语言的标准写法,有些编译器会因为缺省返回类型给你警告哦。
内容的提问来源于stack exchange,提问作者Gen
相关产品推荐
相关产品推荐

