Как использовать gets в цикле - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет! Подскажите, пожалуйста, в чем дело.Странно вводятся Фамилии и инициалы второго и последующих студентов.(на скриншоте видно)
#include<stdio.h>
#include<strings.h>
struct STUDENT
{
 char NAME[30];
 int NUMBER;
 int USP[5];//успеваемость
} mas[3];
int main (void)
{ 
 int i,i_usp;
 for(i=0;i<3;i++)
  {
   printf("Введите фамилию и инициалы\n");
   gets(mas[i].NAME);
   printf("Введите номер группы\n");
   scanf("%d", &mas[i].NUMBER);
   printf("Введите оценки через пробел и нажмите Enter\n");
   for(i_usp=0;i_usp<5;i_usp++)
    scanf("%d", &mas[i].USP[i_usp]);
  }
 for(i=0;i<3;i++)
  {
   printf("Фамилия и инициалы=%s    Номер группы=%d     ", mas[i].NAME, mas[i].NUMBER);
   printf("Оценки=");
   for(i_usp=0;i_usp<5;i_usp++)
    printf("%d ",mas[i].USP[i_usp]);
    printf("\n");
  }
}
Огромное спасибо

Решение задачи: «Как использовать gets в цикле»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
struct STUDENT
{
    char NAME[30];
    int NUMBER;
    int USP[5];
} mas[3];
 
int main(void)
{
    int i,i_usp;
    for(i=0;i<3;i++)
    {
        printf("Введите фамилию и инициалы\n");
        gets(mas[i].NAME);
        printf("Введите номер группы\n");
        scanf("%d", &mas[i].NUMBER);
        printf("Введите оценки через пробел и нажмите Enter\n");
        for(i_usp=0;i_usp<5;i_usp++)
            scanf("%d", &mas[i].USP[i_usp]);
        getchar();
    }
    for(i=0;i<3;i++)
    {
        printf("Фамилия и инициалы=%s    Номер группы=%d     ", mas[i].NAME, mas[i].NUMBER);
        printf("Оценки=");
        for(i_usp=0;i_usp<5;i_usp++)
            printf("%d ",mas[i].USP[i_usp]);
        printf("\n");
    }
    return 0;
}

Объяснение кода листинга программы

  1. Объявлены структура данных STUDENT и массив структур mas[3]
  2. Введен цикл for для обработки каждого элемента массива mas
  3. В каждой итерации цикла выводится запрос на ввод фамилии и инициалов, которые считываются функцией gets(mas[i].NAME)
  4. Выводится запрос на ввод номера группы, который считывается функцией scanf(%d, &mas[i].NUMBER)
  5. Выводится запрос на ввод оценок через пробел, которые считываются функцией scanf(%d, &mas[i].USP[i_usp]) в цикле for
  6. После окончания ввода вызовется функция getchar() для сброса буфера ввода
  7. После окончания цикла выводится информация о каждом студенте в формате фамилия и инициалы, номер группы, оценки
  8. Возвращается 0, чтобы указать, что программа успешно завершилась

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы