C语言中用户输入数组的频率分析问题

C语言中用户输入数组的频率分析问题,c,C,我应该对用户输入数组进行频率分析。用户可以根据需要输入0-1000之间的任意数量的数字,最多可以输入100个数字,用户通过输入负数结束输入。void函数将计算出现次数最多的数字,这两个变量应作为指针发送给函数 我的问题是,无论我做什么,分析似乎都会计算数组中的所有“空”元素,我无法找出我做错了什么。如果我把数组缩小到10个元素,效果会很好。因为我在编程方面是一个完全的新手,我已经修改了大约一百万次代码,所以在这一点上,我记不起我对原始代码做了哪些修改。调试时,我被困在函数中的第二个for循环中

我应该对用户输入数组进行频率分析。用户可以根据需要输入0-1000之间的任意数量的数字,最多可以输入100个数字,用户通过输入负数结束输入。void函数将计算出现次数最多的数字,这两个变量应作为指针发送给函数

我的问题是,无论我做什么,分析似乎都会计算数组中的所有“空”元素,我无法找出我做错了什么。如果我把数组缩小到10个元素,效果会很好。因为我在编程方面是一个完全的新手,我已经修改了大约一百万次代码,所以在这一点上,我记不起我对原始代码做了哪些修改。调试时,我被困在函数中的第二个for循环中

#include <stdio.h>

#define MAX 100
#define INTERVAL 1000

void frequencyAnalysis(int array[],int *number, int *freq)
{
    int element = 0, count = 0;

    for (int i = 0; i < MAX; i++) {
        int tempElement = array[i];
        int tempCount = 0;

        for (int j = 0; j < MAX; j++)
            if (array[j] == tempElement)
                tempCount++;

        if (tempCount > count) {
            element = tempElement;
            count = tempCount;
        }
    }

    *number = element; 
    *freq = count;
}

int main(void)
{
    int array[MAX], i, j, number = 0, freq = 0;

    printf("Hello.\n"
        "Please enter a number between 0-1000. "
        "Enter as many number as you want (maximum 100).\n"
        "Exit by entering a negative number.\n\n");
    printf("Enter a number:\n");

    for (i = 0; i < MAX; i++) {
        scanf("%d", &array[i]);
        if (array[i] < 0)
            break;
    }

    frequencyAnalysis(array, &number, &freq);

    printf("The number:%d is the most frequent number and appears %d times.\n", number, freq);

    return 0;
}
#包括
#定义最大值100
#定义间隔1000
无效频率分析(int数组[],int*编号,int*频率)
{
int元素=0,计数=0;
对于(int i=0;i计数){
元素=临时元素;
计数=临时计数;
}
}
*数字=元素;
*频率=计数;
}
内部主(空)
{
int数组[MAX],i,j,number=0,freq=0;
printf(“你好。\n”
“请输入一个介于0-1000之间的数字。”
“输入所需数量(最多100个)。\n”
“输入负数退出。\n\n”);
printf(“输入一个数字:\n”);
对于(i=0;i
解决第一个问题,输入用户实际输入的项目数,这样您就不会运行到
最大值(包括所有未使用的单元格)。钥匙是
nitems

void frequencyAnalysis(int array[], int nitems, int *number, int *freq)
{
    for (int i = 0; i < nitems; i++) {
        ...
        for (int j = 0; j < nitems; j++)
        {
           // do stuff
        }
    }
}

int main(void)
{
int array[MAX],i, j, number = 0, freq = 0;

    ...
    frequencyAnalysis(array, i, &number,&freq);
    ///
}
void frequency分析(int-array[],int-nitems,int*number,int*freq)
{
对于(int i=0;i
我想我现在已经修复了它们。即使用户没有输入那么多项,您的代码也会在整个数组中运行(最多),并且每个数组元素的初始值都将是堆栈中的随机垃圾。或许可以考虑分析一下它应该看多少个数字?谢谢,我一直在努力弄清楚如何只使用一整天的输入值。我知道这很容易,但我就是做不到。还建议您使用
scanf()
的结果来帮助结束循环。它返回正确转换的项目数,因此如果它们键入
abc
,则这是虚假输入,也应该结束循环<代码>如果(scanf(“%d”)和数组[i])!=1 | |数组[i]<0)中断