C: массив, цикл, минимальные значения элементов

#c

#c

Вопрос:

Я ищу помощь в этом вопросе:

«Создайте массив из 10 целых чисел, называемый myArray. Присвойте содержимому массива начальное значение 0 в объявлении переменной. Создайте цикл для запроса пользователя и получения пересмотренных значений для всех элементов массива, нажимая ENTER после каждого из 10 элементов. Внутри цикла следите за тем, какой элемент имеет наименьшее значение. После завершения цикла отобразите индекс и значение минимального элемента. «

Я новый студент. Код, который я сделал, не работает, но надеюсь, что кто-то сможет увидеть проблему или то, что мне не хватает. Переменная GetNum была создана нашим учителем для нас.

Мне нужна помощь, чтобы иметь возможность выводить наименьший элемент с переменной, связанной с этим элементом.

 int main()
{
    int getNum(void);
    int sizeArray = 10;
    int myArray[11] = {0,0,0,0,0,0,0,0,0,0};
    int counter = 0;
    int smallestNumber =0;

    print("Enter 10 Integers:n");
    for (counter = 0; counter < sizeArray; counter  )
    {
        myArray[sizeArray] = getNum();
    }
    for (counter = 0; counter < sizeArray; counter  )
    {
        if(myArray[counter] < smallestNumber) {
            smallestNumber = myArray[counter];
        }
    }
    printf("Smallest number is %d, in Element %d. n", smallestNumber, counter);
    return 0;
}

#pragma warning(disable: 4996)
int getNum(void) {
    char record[121] = {0};
    int number = 0;
    fgets(record, 121, stdin);
    if( sscanf(record, "%d", amp;number) != 1){
        number = -1;
    }
    return number;
}
  

Комментарии:

1. Создайте массив из 10 целых чисел, называемый myArray — ваш myArray размер имеет одно целое число.

2. «не работает» как так? Каковы симптомы?

3. Я изменил myArray на 10. @EugeneSh.

4. Я могу ввести 10 целых чисел, но там код прерывается. Он не возвращает наименьшее число и элемент. Я не уверен, почему @Yunnosch

5. Если вы не объявите int myArray[10] , что у вас нет массива из 10. Когда вы присваиваете что-либо, кроме myArray[0] , вы вызываете неопределенное поведение.

Ответ №1:

Вы отредактировали свой код, поэтому я приведу основную проблему с вашим исходным кодом для контекста.

Вы изначально объявили и определили свой myArray следующим образом:

 int myArray[] = {0};
  

Как упоминалось в комментариях, правильный способ добиться этого — с:

 int myArray[10] = {0};
  

В качестве альтернативы, вы могли бы сделать это с помощью цикла for, как вы пытались изначально с:

 for(int i = 0; i < 10; i  )
{
    myArray[i] = 0;
}
  

Но для такой простой задачи первый способ намного проще.

Однако мы не должны останавливаться на достигнутом. Есть несколько простых способов улучшить ваш код. Вместо жесткого кодирования размера массива и наличия переменной sizeArray, почему бы не сделать что-то вроде инструкции define перед вашей основной функцией:

 #define SIZE_ARRAY 10
  

Это позволит вам сделать некоторые полезные вещи в вашем коде, которые могут быть изменены НАМНОГО проще в будущем:

 int myArray[SIZE_ARRAY] = {0};
...
for (int i = 0; i < SIZE_ARRAY; i  ) {} //Note also the change to 'int i'
  

Другое дело — переменная счетчика. Это дополнительная переменная, которая вам не нужна. Вы можете просто использовать ‘int i’, как указано выше, в вашем цикле. Что, если вместо переменной counter И переменной smallestNumber вы объединяете их в одну переменную, называемую примерно так:

 int smallestIdx = 0;
  

Затем в вашем цикле for вы могли бы сделать что-то вроде этого:

 for(int i = 0; i < SIZE_ARRAY; i  )
{
    myArray[i] = getNum();
    if (myArray[i] < myArray[smallestIdx]){
    smallestIdx = i;
    }
}
  

И поскольку вы отслеживаете только индекс наименьшего целого числа в вашем массиве, вы можете печатать так:

 printf("Smallest number is %d, in Element %d. n", myArray[smallestIdx], smallestIdx);
  

Комментарии:

1. Большое вам спасибо!