При заполнении структуры не отрабатывает строка 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);
- }
Объяснение кода листинга программы
scanf (
%d,&prov);
- программа считывает целочисленное значение от пользователя и сохраняет его в переменнойprov
.{
- начало блока кодаchar c;
- объявление переменной типаchar
с именемc
.while((c = getchar()) != '\n' && c != EOF);
- цикл, который будет выполняться до тех пор, пока считываемый символ не является символом новой строки (\n
) или до тех пор, пока не достигнут конец файла (EOF). Внутри цикла считывается символc
с помощью функцииgetchar()
.}
- конец блока кода
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д