Markovnikov
Markovnikov

Reputation: 41

While loop with user input validation to fill array, then search array for largest number.

I am working on a program that will accept user input to fill an array and then quit when the user enters q. Next the array is passed to a function that finds the largest value in the array. My program seems like it would work, but I believe that user input for the array is incorrect and I am not sure how to solve it.

#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; 
}

Upvotes: 0

Views: 206

Answers (2)

Sumon Sarker
Sumon Sarker

Reputation: 2795

Here is another solution for your problem.

In main() function

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

Note : Initialize the value of i=0, Then input and update nums[] array

In maxnum() function

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

Note: Start i=0 and find the max mumber and return the value

Upvotes: 0

Jean-Fran&#231;ois Fabre
Jean-Fran&#231;ois Fabre

Reputation: 140196

First i is unitialized.

Then your inner for loop is strange (why someone would do that??) and sets i to SIZE in the end, which is not good.

I don't give more details, but the value of i is trash all the time because of those 2 mistakes it should be:

int i = 0;

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

so you read one by one, and protect against array out of bounds by the second condition.

After that you're passing NUMS

largest = maxnum(nums, SIZE);

whereas the array could contain fewer valid values. Just pass

largest = maxnum(nums, i);

Upvotes: 3

Related Questions