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

C语言while循环语句顺序错误导致输出缺失的原因咨询

C语言循环输出缺失的原因分析

代码片段

#include <stdio.h>

int main(void)
{
      int n, sum = 0;
      printf("This program lists terms with each term being sum of previous terms and itself\n");
      printf("Enter integers (0 to terminate): ");

      scanf("%d", &n);
      
      while (n != 0) {
          sum += n;
          scanf("%d", &n);
          printf("The sum is: %d\n", sum);
      }
}

问题描述

当依次输入1、2、3、0时,预期输出为:

The sum is: 1
The sum is: 3
The sum is: 6

但实际运行时,The sum is: 6会被省略。只有交换循环内scanf("%d", &n);与printf("The sum is: %d\n", sum);的顺序,才能得到预期结果,请问原因是什么?

原因解析

核心问题出在循环内语句的执行顺序:

  • 原代码的循环执行流程:
    1. 将当前输入的n累加至sum
    2. 立即读取下一个输入值到n
    3. 打印当前的sum

对应输入1、2、3、0的执行步骤:

  1. 第一次循环:sum += 1(sum=1)→ 读取2 → 打印sum=1
  2. 第二次循环:sum += 2(sum=3)→ 读取3 → 打印sum=3
  3. 第三次循环:sum += 3(sum=6)→ 读取0 → 此时n=0,循环条件n != 0不成立,直接跳出循环,还未执行printf语句就退出了,因此sum=6的结果永远不会被打印
  • 交换scanf和printf顺序后,循环流程变为:
    1. 将当前n累加至sum
    2. 先打印当前的sum
    3. 再读取下一个输入值到n

此时第三次循环的执行步骤:sum +=3(sum=6)→ 打印sum=6 → 读取0 → 退出循环,所有预期结果都能正常输出

本质就是原代码中,最后一次计算出的sum还没来得及打印,就因为读取到终止符0直接跳出了循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:05:07