Вам необходимо сохранить ввод в переменной, в противном случае вы продолжаете запрашивать ввод несколько раз подряд для каждого getchar
вызова.
По странным историческим причинам getchar
фактически возвращает int
, так как значение EOF
, которое может быть возвращено из него, является int
. Таким образом, переменная должна быть int
.
И, наконец, каждый раз, когда пользователь нажимает клавишу ввода, к входному потоку добавляется невидимый символ перевода строки \n
. Этот персонаж бесполезен, поэтому вы должны выбросить его с дополнительным чтением.
#include <stdio.h>
int main (void)
{
int input;
do
{
printf("Enter x\n");
input = getchar();
getchar(); // extra getchar to chew up line feed from stdin
if (input=='x'|| input=='X')
{
printf("Entered char is X\n");
}
else
{
printf("Input incorrect! Please try again!!!\n");
}
} while (input!='x' && input!='X');
return 0;
}
Обратите внимание, что противоположностью input=='x'|| input=='X'
является input!='x' && input!='X'
(законы де Моргана). «Если вход не является« х », а вход не« X », то цикл".