打印随机数而不是我的var

时间:2019-01-03 13:08:33

标签: c

我进行了一次练习,然后需要读取用户想要的任意数量的数字,并显示较高的数字和被读取的次数。我试图构建代码,并在我的脑海中认为它应该可以工作,但是当显示数字等时,它显示了一些“随机数”,而不是我的变量“ max”。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int aux1, j, i,k, max = -99999,cont;

    printf("How many numbers will be read: \t");
    scanf("%d", &aux1);

    int vet[aux1];

    for(k=0;k<aux1;k++){
        printf("Digit a number: \t");
        scanf("%d",&vet[k]);
    }

    for(i = 0 ; i<10 ; i++){
        if(vet[i] > max) max=vet[i];
    }

    cont=1;
    j=0;

    while(j<=aux1){
        if(max==vet[j]){
            cont++;
        }
        j++;
    }
    printf(" The higher number is %d and it was read %d times \n", max, cont);

    system("pause");
    return 0;
}

如果我在屏幕上输入要读取3个数字的示例,然后输入1、2和3,则输入较高的数字是“ 1954048954”,并被读取1次,此时应输入“ 3”是较高的数字,它被读取了1次”

1 个答案:

答案 0 :(得分:4)

您正在阅读数组末尾的内容:

for(i = 0 ; i<10 ; i++){
   if(vet[i] > max) max=vet[i];
}

如果您为aux1输入3,则vet是一个由3个数字组成的数组,但是在这里您将遍历10个数组元素。这将读取数组末尾,并调用undefined beahvior

将循环固定为数组大小之内:

for(i = 0 ; i<aux1 ; i++){
   if(vet[i] > max) max=vet[i];
}

在计算max元素时,您在这里也遇到类似的问题:

while(j<=aux1){
    if(max==vet[j]){
        cont++;
    }
    j++;
}

您在这里遇到一个错误,您的循环条件应改为:

while(j<aux1){