Здравствуйте, ansi, Вы писали:
A>Вообще, как работает scanf: с клавиатуры читается буфер, далее из этого буфера читается значение пока: A>[list] A>не встретим конец буфера, A>не встретим недопустимый символ, A>не встретим пробел, A>полностью не считаем значение.
Позиция в буфере запоминается и равна последнему считанному символу.
A>Например, если ты вызвал scanf("%c"), а я ввел "yes", то scanf запишет в буфер "yes". Далее в твою переменную он запишет символ 'y'. Буфер теперь содержит "es".
A>Далее, при следующем вызове scanf она смотрит, есть ли у нее что-нибудь в буфере, и если есть, то ввод с клавиатуры не производится, а очередной токен читается из этого буфера. A>В нашем случае буфер содержит "es". И если ты сейчас вызовешь scanf("%f"), то на первом же символе 'e' функция заматерится и вернет управление, в твоей же переменной останется какой-то мусор (скорее всего не нулевой) а буфер останется таким же. Это причина ошибок 2 и 3.
Тогда вопрос. Если в буфере, после ввода 'y' (спецификатор "%c") остается символ '\0' — не понимаю, как тогда вообще считать только один символ?