#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 и найдите максимальное значение и верните значение