2014-11-29 3 views
0

У меня есть следующий фрагмент кода:fgets конфликт при чтении некоторое значение и нажав клавишу ввода

int val; 
scanf("%d", &val); 
char *c = malloc(MAX * sizeof(char)); 
fgets(c, MAX, stdin); 
puts(c); 
free(c); 

, который должен в основном читать некоторое целое значение имени, а затем текст (MAX символов).

Дело в том, что когда я запустил его и, например, введите 10 (val = 10), а затем нажмите enter, он «перепрыгнет» через fgets. Я думаю, что это происходит, потому что символ новой строки заставляет fgets останавливать чтение.

Как исправить эту программу, чтобы она позволила мне ввести значение val, нажать enter и после этого ввести текст?

Спасибо!

ответ

1

В своем коде, добавьте getchar() перед тем fgets(), который будет потреблять последние ENTER нажатия клавиши, хранящейся в буфере ввода.

int val; 
scanf("%d", &val); 
char *c = malloc(MAX * sizeof(char)); 
getchar(); 
fgets(c, MAX, stdin); 
puts(c); 
free(c); 
Смежные вопросы