#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. Большое вам спасибо!