При заполнении структуры не отрабатывает строка 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().}- конец блока кода