Цикл while с проверкой ввода пользователем для заполнения массива, затем поиск в массиве наибольшего числа.

#c #arrays #while-loop

#c #массивы #цикл while

Вопрос:

Я работаю над программой, которая будет принимать вводимые пользователем данные для заполнения массива, а затем завершит работу, когда пользователь введет q. Затем массив передается функции, которая находит наибольшее значение в массиве. Похоже, что моя программа будет работать, но я считаю, что пользовательский ввод для массива неверен, и я не уверен, как это решить.

 #include <stdio.h>
#define SIZE 30

int maxnum(int userarray[], int maxx);


int main()
{
    int i;
    int nums[SIZE];
    int largest;


    printf("Type integer numbers (up to 30), followed by q to quit:n");

    while(scanf("%d", amp;nums[i]) == 1)
    {
        for(i = 0; i < SIZE; i  )
        {
            //blank
        }
    }

    largest = maxnum(nums, SIZE);
    printf("The largest number is: %dn", largest);

    return 0;
}

int maxnum(int userarray[], int maxx)
{
    int i;
    int maxnumber; 

    maxnumber = userarray[0];

    for(i = 1; i < maxx; i  )
    {
        if(maxnumber < userarray[i])
        {
            maxnumber = userarray[i];
        }
    }

    return maxnumber; 
}
 

Ответ №1:

Сначала i выполняется инициализация.

Тогда ваш внутренний for цикл странный (зачем кому-то это делать ??) и устанавливается i SIZE в конце, что нехорошо.

Я не даю более подробной информации, но значение i постоянно является мусором из-за этих 2 ошибок, которые должны быть:

 int i = 0;

while((i<SIZE) amp;amp; (scanf("%d", amp;nums[i]) == 1))
{
    i  ;
}
 

таким образом, вы читаете один за другим и защищаете от выхода массива за пределы вторым условием.

После этого вы передаете NUMS

 largest = maxnum(nums, SIZE);
 

в то время как массив может содержать меньше допустимых значений. Просто передайте

 largest = maxnum(nums, i);
 

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

1. как верно!! исправлено. Спасибо

Ответ №2:

Вот еще одно решение вашей проблемы.

В функции main()

 int n,i=0;
  while(scanf("%d",amp;n) == 1){
    nums[i  ] = n;
  }
n = maxnum(nums, i);
printf("The largest number is: %dn", n);
 

Примечание: инициализируйте значение i=0, затем введите и обновите массив nums[]

В функции maxnum()

 for(i = 0; i < maxx; i  )    {
  if(maxnumber < userarray[i]){
      maxnumber = userarray[i];
  }
}
 

Примечание: запустите i = 0 и найдите максимальное значение и верните значение