Рассмотрим следующий код:
#include <stdio.h>
int main (void)
{
char str1[128], str2[128], str3[128];
printf ("\nEnter str1: ");
scanf ("%[^\n]", str1);
printf ("\nstr1 = %s", str1);
printf ("\nEnter str2: ");
scanf ("%[^\n]", str2);
printf ("\nstr2 = %s", str2);
printf ("\nEnter str3: ");
scanf ("%[^\n]", str3);
printf ("\nstr3 = %s", str3);
printf ("\n");
return 0;
}
Когда он выполняется, только первые scanf
останавливаются для подсказки. Программа не останавливается в течение следующих scanf
с. Но если изменить строку формата с "%[^\n]"
на " %[^\n]"
(обратите внимание на пробел перед %
), то все работает нормально. Принимается ли автоматически какой-либо существующий символ новой строки из предыдущего входного буфера? Но сброс stdin
этого не решает.
Какова причина этого.
fgets
для этого. Обычно я рекомендую избегатьscanf
в большинстве ситуаций, но особенно здесь вы используете очень мощную и сложную в использовании функцию для очень простой задачи. - person Chris Lutz   schedule 22.05.2011