求解: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; }
关键执行步骤拆解
- 变量初始化:
one=0,two=0,total=0 - scanf赋值错误:
scanf("%d %d", &one, &two)成功读取了2个整数(56和2),因此返回值为2,此时total被赋值为2,而非你误以为的输入数值的总和或初始0值。 - 循环三次迭代(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
- 第一次迭代(i=0):
- 最终输出:循环结束后
total的值为114,与运行结果一致。
为什么修正条件后还是114?
你提到修正了条件但结果不变,大概率是没解决scanf赋值total的核心问题——这个错误直接导致初始total值不是0,而是2,后续循环的计算逻辑全部偏离预期。
内容的提问来源于stack exchange,提问作者Alyssa Manlosa
相关产品推荐
相关产品推荐

