C语言求最大值及出现次数时程序无法读取输入问题排查
代码错误点说明
- 核心问题就是你写的for循环条件完全错误,导致循环根本没有执行:
你当前的循环写法是for (i = 1; numberOfIntegers == listOfIntegers; i++),listOfIntegers在进入循环前没有初始化,是内存中的随机值,几乎不可能等于你输入的numberOfIntegers,循环条件从一开始就不成立,直接跳过了输入和统计逻辑,所以才会直接输出初始的largest=0、occurrence=0。 - 第二个逻辑错误:当检测到比当前
largest更大的新值时,没有把出现次数occurrence重置为1,旧最大值的统计次数会错误叠加到新最大值上。 - 第三个边界缺陷:
largest初始化为0,如果用户输入的所有整数都是负数,最大值会统计错误,建议初始化为极小值或者第一个输入的数值。
修正后的参考代码
#include <stdio.h> #include <limits.h> // 用于获取整数极小值INT_MIN // 假设你代码里的p、s是封装的printf、scanf,这里保留你的使用习惯 #define p(...) printf(__VA_ARGS__) #define s(...) scanf(__VA_ARGS__) int main() { int i, numberOfIntegers, currentInteger, largest = INT_MIN, occurrence = 0; p("\n How many integers do you want to enter? "); s("%i", &numberOfIntegers); p("\n Input %i number of integers: ", numberOfIntegers); // 修正循环条件:控制循环执行numberOfIntegers次 for (i = 0; i < numberOfIntegers; i++) { s("%i", ¤tInteger); if (currentInteger > largest) { largest = currentInteger; occurrence = 1; // 出现新最大值,重置计数为1 } else if (currentInteger == largest) { occurrence++; // 匹配当前最大值,计数加1 } } p("\n \n The largest value is %i and the number of occurrence is %i", largest, occurrence); return 0; }
输入适配说明
你示例输入里用逗号分隔数字,而scanf默认用空格/换行/制表符作为分隔符,如果要支持逗号分隔输入,可以把输入格式符修改为"%i,",也可以直接要求用户用空格分隔数字,程序即可正常运行。
内容的提问来源于stack exchange,提问作者Liyanna
相关产品推荐
相关产品推荐

