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

求解:C语言代码输入56和2后输出114而非预期116的原因

输入56和2时代码输出114而非116的原因解析

当运行你提供的C语言代码并输入56 2时,最终输出为114,核心问题出在**scanf的返回值被错误赋值给了total**,以下是逐步骤的执行过程拆解:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#define SZ 3 

int main(void)
{
    int i, one = 0, two = 0, total = 0;

    printf("Enter two whole numbers separated by a space: "); // 用户输入56 2
    total = scanf("%d %d", &one, &two);

    for (i = 0; i < SZ; i++)
    {
        if (i % two) 
        {
            total = two + one / total;
        }
        else
        {
            total += one * two;
        }
    }

    printf("total is equal to %d\n", total);

    return 0;
}

关键执行步骤拆解

  1. 变量初始化:one=0,two=0,total=0
  2. scanf赋值错误:
    scanf("%d %d", &one, &two)成功读取了2个整数(56和2),因此返回值为2,此时total被赋值为2,而非你误以为的输入数值的总和或初始0值。
  3. 循环三次迭代(SZ=3):
    • 第一次迭代(i=0):
      i%two = 0%2 = 0,进入else分支:
      total += one*two → total = 2 + 56*2 = 2 + 112 = 114
    • 第二次迭代(i=1):
      i%two =1%2=1(非0),进入if分支:
      整数除法中56/114=0,因此total=2+0=2
    • 第三次迭代(i=2):
      i%two=2%2=0,进入else分支:
      total +=56*2 → total=2+112=114
  4. 最终输出:循环结束后total的值为114,与运行结果一致。

为什么修正条件后还是114?

你提到修正了条件但结果不变,大概率是没解决scanf赋值total的核心问题——这个错误直接导致初始total值不是0,而是2,后续循环的计算逻辑全部偏离预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:42:27