C语言仅用while和if求最值代码异常:未输入大于16值时max恒为16求解决
问题分析与解决
嘿,我明白你遇到的问题了,咱们来一步步拆解根源,再给出修复方案:
核心问题:未正确初始化max和min变量
你代码里的这一行:
max, min = number;
存在两个关键问题:
- 逗号运算符的误用:C语言中逗号运算符优先级极低,这行代码实际等价于
(max), (min = number);——也就是说只有min被赋值为number,而max完全没有被初始化,它的值是内存里的随机垃圾数据(也就是你看到的16,换个运行环境可能会是其他随机数)。 number本身未初始化:执行这行代码时,number还没有被输入赋值,所以min也被赋予了随机值,这属于C语言里的未定义行为,结果完全不可控。
修复方案:用第一个有效输入初始化max和min
正确的思路是先读取第一个数字,用它来初始化max和min,再循环读取剩下的9个数字进行比较。这样能保证max和min从有效输入开始,不会被垃圾值干扰。
修复后的代码如下:
#include <stdio.h> #include <stdlib.h> int main() { printf("Program Is Running\n"); int number, counter, max, min; counter = 1; // 已读取第一个数,计数从1开始 // 先读取第一个数,初始化max和min为有效输入值 scanf("%d", &number); max = number; min = number; while (counter < 10) { scanf("%d", &number); if (number >= max) { max = number; } if (number <= min) { min = number; } counter++; } printf("Max = %d\n", max); printf("Min = %d\n", min); return 0; }
额外说明
- 修改后,
max和min的初始值是第一个输入的有效数字,后续每次输入都会基于这个有效值更新最大值和最小值,不会再出现随机垃圾值。 - 循环从
counter=1开始,因为已经读取了第一个数,只需要再读9次就能凑够10个数,逻辑更严谨。
内容的提问来源于stack exchange,提问作者Rafly Yanuar
相关产品推荐
相关产品推荐

