ShLaDeS
ShLaDeS

Reputation: 19

C loop with undetermined number

I've been stumped for the past few days trying to modify my current code to be able to input an undetermined number of students.

#include <stdio.h>

int main(void)
{
   char StudentName[100];
   float ExamValue, Sum, Avg;
   int students, exams;

   for (students = 0; students < 5; students++)
   {
      Sum = 0.0;
      printf("Enter Student Name \n");
      scanf("%s", StudentName);

      for (exams = 0; exams < 3; exams++)
      {
         printf ("Enter exam grade: \n");
         scanf("%f", &ExamValue);
         Sum += ExamValue;
      }
      Avg = Sum / 3.0;
      printf("Average for %s is %f\n", StudentName, Avg);
   }
   return 0;
}

As it is now, I have to manually input the amount of students. Does anyone know how I can modify this code in order to enter an undetermined amount of students? I'm starting to think that it is impossible to do and maintain the integrity of the rest of the code. Any help is greatly appreciated, thanks!

Upvotes: 1

Views: 2775

Answers (4)

dee
dee

Reputation: 1

enter image description here

You can prompt the user to supply the number of inputs. Once the user tells you how many inputs will be given, then you can simply use a for loop to read that many inputs

Upvotes: 0

nalzok
nalzok

Reputation: 16107

You can ask the user whether there are more students per loop:

#include <stdio.h>

int main(void)
{
    char StudentName[100];
    float ExamValue, Sum, Avg;
    int students, exams;
    char stop;

    for (;;)
    {
        Sum = 0.0;
        printf("Enter Student Name \n");
        scanf(" %s", StudentName);
        for (exams = 0; exams < 3; exams++)
        {
            printf ("Enter exam grade: \n");
            scanf("%f", &ExamValue);
            Sum += ExamValue;
        }
        Avg = Sum / 3.0;
        printf("Average for %s is %f\n", StudentName, Avg);

        puts("More students?(Y/N)");
        scanf("%*[^yYnN]%c%*[^\n]%*c", &stop); // read one of 'y', 'Y', 'n', 'N', then discard that line, including '\n'.
        if (stop == 'N' || stop == 'n')
            break;
    }
    return 0;
}

Upvotes: 0

Lajos Arpad
Lajos Arpad

Reputation: 76426

You can ask for the number of users before the for and then use that number as upper bounds of the for. Something like this:

int students, exams, nr;
printf("Enter Student Number \n");
scanf("%d", &nr);
for (students = 0; students < nr; students++)
{
    //your code
}

Upvotes: 1

Yam Marcovic
Yam Marcovic

Reputation: 8141

You can do something like while (stillAdding) instead of the for loop, and prompt the user with Enter student name or QUIT to stop, or even Would you like to enter a new student [Y/n]. You'd modify the stillAdding variable accordingly. In short, you leave it up to the user to specify when they want to stop inputting more data.

Upvotes: 4

Related Questions