Когда вы используете scanf
и %c
, он читает любой символ - включая символ новой строки, который вы получаете при нажатии клавиши ВВОД.
Так что, если вы запуститезапрограммируйте и наберите
a <Return>
. Вы совершаете две поездки по циклу: одну для чтения 'a'
и одну для чтения '\n'
.Если вы наберете
<Space> <Space> a <Return>
, он выполнит четыре цикла.И если вы наберете
x <Return>
, он совершит только один обход цикла, потому что он заметит, что вы набрали 'x'
, и выйдет.
Все станет немного яснее, если выраспечатайте каждый полученный вами символ:
for (int i = 0; a != 'x'; )
{
printf("Enter 'a' : ");
scanf("%c",&a);
printf("you typed %d = %c\n", a, a);
}
Когда вы увидите его, выведите
you typed 10 =
- это одна из новых строк.(Значение '\n'
равно 10 в ASCII.)
Я сказал, что %c
читает любой символ - но это несколько необычно.Большинство других спецификаторов формата scanf
- %d
, %f
, %s
и т. Д. - пропускают "пробелы", то есть пробелы, табуляции, новые строки и некоторые другие.Но %c
не пропускает их, потому что его задача - прочитать ровно один символ, и кто-то подумал, что вы, возможно, захотите использовать его и для чтения пробельных символов.