Компилятор не останавливается на scanf () для ввода

Это небольшой код C

#include int main() { char ch='Y'; while(ch=='Y') { printf("\nEnter new value for Y "); scanf("%c",&ch); if(ch=='Y' || ch=='y') // do some work printf("Y was selected\n"); } printf("exiting main"); return 0; } 

Я впервые ввел «Y» в качестве входных данных (без qoutes), цикл вернул true и вошел во второй раз, но на этот раз он не остановился на scanf () для ввода пользователем. (Пожалуйста, выполните с вводом как «Y» для ясности). Результат показан ниже:

введите описание изображения здесь

Как показано здесь, компилятор не останавливался для ввода во второй раз. В чем причина этого. Заранее спасибо !

Просто поместите пробел в scanf следующим образом:

 scanf(" %c",&ch); 

И причина в том, что вы вводите: Y\n (с enter)
scanf только читает Y ! Таким образом, в следующем scanf \n все еще находится в буфере и читается!

Поэтому, если у вас теперь есть пробел, прежде чем вы прочитаете что-то новое, он сделает разрез (и выглядит так: «\ n»)!

'\n' автоматически становится входом для следующей итерации.

Чтобы избежать этого, используйте getchar() . Он позаботится о нежелательном '\n' .

 #include int main() { char ch='Y'; while(ch=='Y') { printf("\nEnter new value for Y "); scanf("%c",&ch); getchar(); //takes care of '\n' if(ch=='Y' || ch=='y') // do some work printf("Y was selected\n"); } printf("exiting main"); return 0; } в #include int main() { char ch='Y'; while(ch=='Y') { printf("\nEnter new value for Y "); scanf("%c",&ch); getchar(); //takes care of '\n' if(ch=='Y' || ch=='y') // do some work printf("Y was selected\n"); } printf("exiting main"); return 0; } 

теперь код работает нормально. Ниже приведен fragment из windows команды.

 Enter new value for YY Y was selected Enter new value for YY Y was selected Enter new value for Y _