#c #gcc #scanf #stdin #ansi
#c #gcc #scanf #стандартный интерфейс #ansi-c
Вопрос:
Помещает ли scanf пробелы в свой буфер или входной поток? Если я скажу
scanf("%c %d %d", amp;character, amp;num1, amp;num2);
И теперь скажем
scanf("%c", amp;char2);
Я знаю, что ввод останется в буфере, но учитываются ли пробелы?
scanf("%c%d%d", amp;character, amp;num1, amp;num2);
Это чем-то отличается от первой части.
И еще кое-что. Могу ли я каким-либо образом отключить scanf после того, как пользователь нажмет enter. Если он нажимает enter после цифры 1, например. Ввод: i 5
Могу ли я как-то заставить scanf остановиться после этого, даже если он ожидает еще одного ввода?
Комментарии:
1. Прочитайте целые строки, затем проанализируйте их, например, с помощью
sscanf
.
Ответ №1:
Пробел в строке формата scanf
будет занимать все пробелы (если таковые имеются); спецификатор формата %d
также проигнорирует любые пробелы перед фактическим числом. Таким образом, " %d"
имеет тот же эффект, что и "%d"
. Спецификатор формата %c
не будет игнорировать пробелы, но будет считывать их, поэтому " %c"
будет отличаться от "%c"
. В вашем случае, где %c
находится в начале строки формата, scanf("%c %d %d", ...)
имеет тот же эффект, что и scanf("%c%d%d", ...)
.
Если вы хотите разрешить выход до того, как все будет введено, я бы посоветовал прочитать полную «строку» с помощью fgets
, а затем соответствующим образом проанализировать входные данные, например, с помощью sscanf
of strtok
.
Комментарии:
1. Не могли бы вы объяснить мне немного подробнее, как будет работать этот scanf, завершающийся после ввода?