Вам просто нужно «потреблять» символ '\n'
после того, как вы прочитали, что вы хотите.Используйте следующую директиву формата:
"%[^\n]%*c"
, которая будет читать все до новой строки в строку, которую вы передаете, затем будет использовать один символ (новую строку), не назначая его чему-либо (что '*'
)является «подавлением присваивания»).
В противном случае символ новой строки остается во входном потоке, ожидая немедленного завершения последующих директив формата "%[^\n]"
.
Проблема с добавлением символа пробела кдиректива формата (" %[^\n]"
) заключается в том, что пробел будет соответствовать любому пробелу.Таким образом, он будет использовать новую строку с конца предыдущего ввода, но также будет использовать любой другой пробел (включая несколько новых строк).
Обновление вашего примера:
char* fmt = "%[^\n]%*c";
printf ("\nEnter str1: ");
scanf (fmt, str1);
printf ("\nstr1 = %s", str1);
printf ("\nEnter str2: ");
scanf (fmt, str2);
printf ("\nstr2 = %s", str2);
printf ("\nEnter str3: ");
scanf (fmt, str3);
printf ("\nstr2 = %s", str3);
printf ("\n");