Случайные числа печатаются вместо моего вар - PullRequest
0 голосов
/ 03 января 2019

У меня есть упражнение, а затем мне нужно прочитать столько цифр, сколько хочет пользователь, показать большее и сколько раз оно было прочитано. Я пытался создать код, и, на мой взгляд, он должен работать, но когда дело доходит до показа числа и т. Д., Он показывает некоторые «случайные числа» вместо моего var, называемого «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 голосов
/ 03 января 2019

Вы читаете после конца вашего массива:

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

Если вы введете 3 для aux1, тогда vet - это массив из 3 чисел, но здесь вы перебираете 10 элементов массива. Это читает после конца массива, вызывая неопределенное поведение .

Исправьте цикл, чтобы он был в пределах размера массива:

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

У вас есть похожая проблема при подсчете максимального элемента:

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

У вас есть ошибка "по одному", вместо этого ваше условие цикла должно быть:

while(j<aux1){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...