Нажатие на возврат завершает 2 сканирования ("% [^ \ n]% * c") - PullRequest
2 голосов
/ 20 сентября 2019

Я пытаюсь прочитать 2 строки ввода пользователя.Для первой последовательности, если я ничего не набираю и просто нажимаю клавишу возврата, программа печатает enter the second sequence, но не разрешает вторую scanf.По сути, возврат просто завершается как scanf, в результате чего оба значения str1 и str2 остаются пустыми.

printf("enter the first sequence: ");
scanf("%[^\n]%*c", str1);

printf("enter the second sequence: ");
scanf("%[^\n]%*c", str2);

Можно ли как-нибудь это исправить?

1 Ответ

3 голосов
/ 20 сентября 2019

Спецификатор формата для строк равен %s, поэтому просто используйте его вместо:

printf("enter the first sequence: ");
scanf("\n%s", str1);

printf("enter the second sequence: ");
scanf("\n%s", str2);

Как прокомментировал @AjayBrahmakshatriya: \n соответствует любому количеству \n символов.

Проблема с %c при чтении char с помощью scanf заключается в том, что он обрабатывает символ новой строки как ввод, как я объяснил в этом примере .


Однако, если бы я был вами,Я бы просто использовал fgets(), вот так:

fgets(str1, sizeof(str1), stdin);
fgets(str2, sizeof(str2), stdin);

Если вы воспользуетесь этим подходом, то вас, вероятно, заинтересует Удаление завершающего символа новой строки из fgets() ввод ?

...