Member 13398528 Ответов: 1

Цикл на основе пользовательского ввода


Я пытаюсь создать код, который выводит среднее значение оценки студента. Пользователь вводит имя, затем три своих экзаменационных балла, а затем выводится среднее значение. Я, кажется, не могу понять, как позволить пользователю вводить любое количество имен студентов. Я хочу, чтобы программа завершилась, когда пользователь не введет другое имя, но я, кажется, не могу понять этого. Самый большой прогресс, который я получил без программы, приводящей к бесконечному циклу, - это оператор if, но оператор if завершается после одной записи.
#include <stdio.h>
int main ()
{
  /* variable definition: */
  char StudentName[100];
  float ExamValue, Sum, Avg;
  int exams;
if (StudentName!=0) {
     // reset Sum to 0
     Sum =0.0;
     printf("Enter Student Name \n");
     scanf("%s", StudentName);
     // Nested Loop for Exams
    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);
} else {
return 0; }
} 


Что я уже пробовал:

Я пытался использовать цикл while, чтобы при вводе пользователем новой строки он заканчивался, но это не сработало. Я пробовал цикл for, который начинался с students = 0; students < StudentName; students++; но это не сработало. Самое большее, что я получил, - это цикл if, но я не понимаю, почему он не работает. Я пытался использовать while (StudentName> 0), но это приводит к бесконечному циклу. Я просто хочу, чтобы программа остановилась, когда пользователь перестанет вводить имена.

1 Ответов

Рейтинг:
1

OriginalGriff

Потому что ты это делаешь:

char StudentName[100];

Такое состояние обязательно пройдет:
if (StudentName!=0) {
Потому что StudentName это массив, а в языке Си имя массива является указателем на первый элемент. Указатели всегда ненулевые, когда они действительны, поэтому ваше условие не может потерпеть неудачу.

На данный момент у вас есть один цикл-получить три элемента от пользователя и усреднить их. Чтобы повторить это для второго, или третьего, или четвертого ученика, вам нужен второй цикл вокруг кода" получить имя ученика и выработать среднее". Вероятно, заменив строку if, о которой я упоминал выше, соответствующим циклом while и добавив "Вы хотите другого студента?" вопрос и ответ в нижней части цикла будут делать то, что вы хотите - но это ваше домашнее задание, а не мое; поэтому я не дам вам никакого кода!