You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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. 读入1,z变成1,判断1≥0成立,继续;
  2. 读入2,z变成3,判断2≥0成立,继续;
  3. 读入-3,z变成0,判断-3≥0不成立,循环结束;
  4. 输出总和0,完美包含了那个负数的结果!

另外还有个小细节:原代码里的main()最好写成int main(),这是C语言的标准写法,有些编译器会因为缺省返回类型给你警告哦。

内容的提问来源于stack exchange,提问作者Gen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:03:12