При заполнении структуры не отрабатывает строка gets - C (СИ)

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

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

В общем, есть такой код, есть структура, проблема заключается в следующем, при заполнении структуры не отрабатывает строка gets (data[i].name); Точнее отрабатывает, но только первый раз, после этого она игнорируется ... В чем проблема ? Ибо я уже минут 20 пытаюсь понять
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
# define slots 3
 
struct base
{
       char name[32];
       char adress[32];
       int step_rodstva;
       }       data[slots];
 
int main ()
{
    int i=0,prov,prov_count=0;
    for (i=0;i<slots;i++)
    {
        system("cls");
        printf ("Vvedite F.I.O.\n");
       gets (data[i].name);

        printf ("Vvedite adres \n");
    
       gets (data[i].adress);
        for(prov_count=0;prov_count!=1;)
        {
        printf ("\nVvedite stepen' rodstva (1-4)\n 1- Blizkie rodstvenniki \n 2- Lica, sostoiashie v rodstvennyh otnosheniah \n 3-dalnie rodstvenniki \n 4- Net rodstvennyh sviazei \n");
        prov_count=0;
        scanf ("%d",&prov);
        if (prov > 0 && prov < 5)
        {
                 prov_count=1;
                data[i].step_rodstva=prov;
                 
        }
        else
        {
            printf ("\nSyntax error. Vvedite eshe raz stepen rodstva.");
            prov_count=0;
        } // Konec else
        } // Konec for
        } // Konec cikla
        for (i=0;i<slots;i++) //vyvod
    {
        
printf ("\n================\n");
        puts (data[i].name);
        puts (data[i].adress);
        printf ("\n%d",data[i].step_rodstva);
      
        }
        printf ("\nYspeshno");
        getch ();
        return 0;
}

Решение задачи: «При заполнении структуры не отрабатывает строка gets»

textual
Листинг программы
            scanf ("%d",&prov); // после ввода числа очищай буфер от символа перевода строки:
            {
                char c;
                while((c = getchar()) != '\n' && c != EOF);
            }

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

  1. scanf (%d,&prov); - программа считывает целочисленное значение от пользователя и сохраняет его в переменной prov.
  2. { - начало блока кода
  3. char c; - объявление переменной типа char с именем c.
  4. while((c = getchar()) != '\n' && c != EOF); - цикл, который будет выполняться до тех пор, пока считываемый символ не является символом новой строки (\n) или до тех пор, пока не достигнут конец файла (EOF). Внутри цикла считывается символ c с помощью функции getchar().
  5. } - конец блока кода

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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