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

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

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

В общем, есть такой код, есть структура, проблема заключается в следующем, при заполнении структуры не отрабатывает строка gets (data[i].name); Точнее отрабатывает, но только первый раз, после этого она игнорируется ... В чем проблема ? Ибо я уже минут 20 пытаюсь понять
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. # define slots 3
  5. struct base
  6. {
  7. char name[32];
  8. char adress[32];
  9. int step_rodstva;
  10. } data[slots];
  11. int main ()
  12. {
  13. int i=0,prov,prov_count=0;
  14. for (i=0;i<slots;i++)
  15. {
  16. system("cls");
  17. printf ("Vvedite F.I.O.\n");
  18. gets (data[i].name);
  19.  
  20. printf ("Vvedite adres \n");
  21. gets (data[i].adress);
  22. for(prov_count=0;prov_count!=1;)
  23. {
  24. 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");
  25. prov_count=0;
  26. scanf ("%d",&prov);
  27. if (prov > 0 && prov < 5)
  28. {
  29. prov_count=1;
  30. data[i].step_rodstva=prov;
  31. }
  32. else
  33. {
  34. printf ("\nSyntax error. Vvedite eshe raz stepen rodstva.");
  35. prov_count=0;
  36. } // Konec else
  37. } // Konec for
  38. } // Konec cikla
  39. for (i=0;i<slots;i++) //vyvod
  40. {
  41. printf ("\n================\n");
  42. puts (data[i].name);
  43. puts (data[i].adress);
  44. printf ("\n%d",data[i].step_rodstva);
  45. }
  46. printf ("\nYspeshno");
  47. getch ();
  48. return 0;
  49. }

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

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

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы