while循环使用用户输入验证来填充数组,然后搜索数组中的最大数字。

时间:2016-10-15 07:33:06

标签: c arrays while-loop

我正在开发一个程序,它将接受用户输入来填充数组,然后在用户输入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", &nums[i]) == 1)
    {
        for(i = 0; i < SIZE; i++)
        {
            //blank
        }
    }

    largest = maxnum(nums, SIZE);
    printf("The largest number is: %d\n", 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; 
}

2 个答案:

答案 0 :(得分:3)

首先i已经酉化了。

然后你的内部for循环很奇怪(为什么有人会这样做?)并最终将i设置为SIZE,这是不好的。

我没有提供更多详细信息,但i的价值一直是垃圾,因为它应该是2个错误:

int i = 0;

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

所以你逐个阅读,并防止第二个条件超出数组范围。

之后,您将通过NUMS

largest = maxnum(nums, SIZE);

而数组可能包含较少的有效值。只需通过

largest = maxnum(nums, i);

答案 1 :(得分:0)

以下是您问题的另一种解决方案。

main()功能

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

注意:初始化 i = 0 的值,然后输入并更新 nums [] 数组

maxnum()功能

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

注意:开始 i = 0 并找到最大值并返回值