#c #io #console-application #stdin #flush
#c #io #консольное приложение #stdin #сброс
Вопрос:
Я пытаюсь позволить пользователю подтвердить свое действие нажатием клавиши ENTER — если нажата любая другая клавиша, указанное «действие» не выполняется.
Однако, вместо простого if((ch=getchar())=='n') {...}
, я действительно хочу очистить stdin
на случай, если пользователь введет что-то вроде hellon
вместо того, чтобы позволить этому быть прочитанным в следующий раз, когда я буду вводить данные в свою программу.
Функция, которую я использую для очистки stdin
, это :
void eat()
{
int eat; while ((eat = getchar()) != 'n' amp;amp; eat != EOF);
}
Однако эта стратегия оставляет меня с пользователем, вынужденным дважды нажимать ENTER, поскольку он «съедает» новую строку, которая должна заставить его отправлять входные данные в мою программу (в терминале).
Что может быть самым простым и элегантным решением?
ПРИМЕЧАНИЕ: я не могу использовать непереносимые решения, такие как настройка консоли на немедленную отправку каждого символа с помощью POSIX terminos.h
.
Комментарии:
1. Другими словами: вы хотите прочитать строку. Если он пустой, это подтверждение, если нет, то нет. Итак …
fgets
?2. @dratenik это звучит блестяще — хотите опубликовать ответ?
3. Ну, тогда ладно.
Ответ №1:
Похоже, вы хотите прочитать строку, а затем проверить, пуста она или нет? Похоже, задание для fgets(..., stdin)
char mystring [100];
fgets (mystring , 100 , stdin);
if (*mystring == 'n') {//confirmed}
Комментарии:
1.подождите… Я больше не могу
eat()
звонить без тех же проблем, что и при использовании последнего'n'
, который будет отмечать EOL, в результате чего пользователю придется дважды нажать ENTER…