Рассмотрим следующий код:
#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
s. Но если строка формата изменяется с "%[^\n]"
на " %[^\n]"
(обратите внимание на пустое пространство перед %
), тогда оно работает нормально. Автоматически принимается ли какой-либо существующий символ новой строки из предыдущего входного буфера? Но промывка stdin
не решает этого.
В чем причина этого.