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

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", &currentInteger);

            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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:54:06