У вас много проблем с использованием gets()
Вместо этого выберите fgets()
fgets(name,13,stdin);
См. этот вопрос SO Почему функция настолько опасна, что ее нельзя использовать?
Причина, по которой fgets()
не работает, может заключаться в том, что вы не обрабатываете новую строку, оставленную scanf в ваших предыдущих операторах.
Вы можете изменить строку формата scanf, чтобы учесть ее: scanf("%d *[^\n]", &N);
*[^\n]
говорит игнорировать все после вашего целочисленного ввода, которое не является новой строкой, но ничего не делать с новой строкой (пропустить ее).
Когда вы используете scanf("%d",&num)
, вы нажимаете 13, а enter
и 13
сохраняются в num
, а символ newline
все еще находится во входном буфере, когда вы читаете fgets
из stdin
, он обрабатывает \n
как введенные вами данные, а оператор fgets()
пропускается.
Вы не можете очистить входной буфер, однако вы можете сделать это fseek(stdin,0,SEEK_END);
добавить это перед каждым оператором fgets
person
niko
schedule
30.10.2013
'\0'
. - person Kevin   schedule 30.10.2013fgets(name, sizeof name, stdin)
вместоgets()
вопрос дан много раз, см. один из ответов stackoverflow.com/questions/7231349/ - person Gangadhar   schedule 30.10.2013scanf
для чтения строк. Просто используйтеfgets
. - person Kninnug   schedule 30.10.2013scanf
, чтобы он использовал любой пробел (например, завершающую новую строку) во входных данных. Но не цитируйте меня по этому поводу. - person Kninnug   schedule 30.10.2013