终止循环

时间:2013-11-16 01:36:04

标签: c loops

所以我有一个函数应该找到用户输入的一组数据的模式。我相信使用'\0'字符终止循环有一个问题,但我不确定。即使这是问题,我也不知道如何解决它。任何建议表示赞赏。

int mode(int input[]){
int array[70]={0},i=0,j=0,i2=0,j2=0;


while (input[i]!='\0'){
    j=input[i];
    array[j]=array[j]+1;
    i++;
    }

while (array[i2]!='\0'){
    if (array[i2]>j2){
        j2=array[i2];
        i2++;
    }
    else{
    i2++;
    }
}
return j2;
}

1 个答案:

答案 0 :(得分:0)

一般来说,您会知道用户输入中有多少条目,因此mode()函数的效果最好为int mode(int num, int input[])。您的代码假定输入数组中的值将在1..69范围内而不进行检查。写'\0'而不是0是奇怪的(虽然技术上合法)。当它遇到零计数时,第二个循环停止。它会立即执行此操作,因为array[0]永远不会设置为零以外的其他任何内容。

我将循环写为for循环,无论是使用'zero as sentinel'还是'explicit count'。

int mode(int input[])
{
    int array[70];
    for (int i = 0; input[i] != 0; i++)
    {
        int value = input[i];
        if (value > 0 && value < 70)
            array[value]++;
    }

    int m_value = array[1];
    for (int j = 2; j < 70; j++)
    {
        if (array[j] > m_value)
            m_value = array[j];
    }

    return m_value;
}

我建议的计数版本的唯一区别是将第一个循环的终止条件从input[i] != 0;更改为i < num;