понедельник, 3 марта 2014 г.

Вопрос-ответ: зачем в видеоуроках используется несколько getchar() подряд?

Вопрос:
Несколько раз в видеоуроках проскакивала фраза о том, что после printf() надо использовать несколько getchar(), но не объяснялось почему (либо я не заметил). Я так подозреваю что это потому что printf не делает перенос на последующую строку. Более того, getchar() адекватно реагирует кажись только на ввод символа, а не на any key типа стрелок. Ввиду этого возможно есть смысл использовать команду _getch()? Она ж вроде работает корректнее?

Ответ:
Два вызова getchar() нужно для задержки программы (ожидания нажатия Enter) после scanf(). Когда вы вводите данные с клавиатуры, используя scanf(), то функция scanf() "вычитывает" введенные с клавиатуры данные, оставляя в буфере клавиатуры нажатие на Enter (#13). Если после этого вызвать getchar(), то функция считает из буфера клавиатуры этот символ и "подумает", что пользователь нажал Enter, вернет значение. Соответственно, задержки-ожидания нажатия клавиши не получится. Поэтому нам понадобится второй getchar(). Первый "проглотит" оставшийся Enter, второй будет ждать нажатия. При этом, сколько бы раз вы ни вызывали scanf() в вашей программе, в буфере клавиатуры останется только один последний Enter. С предыдущими scanf() справится сам.

Комментариев нет:

Отправить комментарий