Избегайте использования fgets()
и scanf()
в одном потоке.
После того, как scanf("%d", &answer)
прочитает числовой текст и сформирует int
, следующие Enter или '\n'
останутся в stdin
. @ син
Позже, fgets(persons[i].f_name,...
просто прочитайте оставшиеся '\n'
в качестве ввода имени.
Различные решения:
A) После scanf("%d", &answer);
прочитать оставшиеся символы в строке
int ch;
while ((ch = getchar()) != '\n') && ch != EOF) {
;
}
B) Используйте fgets()
, чтобы прочитать answer
char buf[50];
fgets(buf, sizeof buf, stdin);
answer = atoi(buf);
C) Используйте fgets()
надежно: int my_get_int(int *i)
if (my_get_int(&answer) == 1) {
// Success
}