Цитата:
Получается это неверно?
Это вопрос передачи информации. Человеческий язык очень неточен. И проблема формулировки терминов в программирование стоит очень остро.
Мне не хватает терминов чтобы это всё сформулировать кратко, но я могу описать как это всё происходит.
Условимся называть вашу программу как test.exe.
getchar() возвращает число.
Далее встаёт вопрос как интерпретировать это число. А делать это мы можем по разному.
Так вот число "-1"=EOF согласно стандарту С++ следует понимать как булевую константу false.
А вот всё остальное следует понимать как символ*.
Что касается CTRL+Z это клавиши. Стандарт С++ не говорит как следует интерпретировать нажатые клавиш. Это дело компьютера, ОС, консоли.
Нажатие клавише посылает сигнал. Клавиатура обрабатывает этот сигнал** преобразовывает в скан-код отправляет в компьютер, а тот в ОС. ОС преобразовывает этот код в свой код. Посылая сигнал программе.
Какой программе? Да той которая обрабатывает эти клавиши в данный момент. В WinXP, Win7 есть такая программа как cmd.exe в простонародье известная как консоль.
Так вот эта cmd.exe получив сообщения что были нажаты CTRL+Z интерпретирует их по своему.
ДОПУСТИМ мы не знаем как работает консоль, а просто по рассуждаем.
Когда мы запускаем test.exe в ОС Win XP. ОС выяснив что это консольное приложение запустила cmd.exe передав в качестве параметра "test.exe". А cmd.exe уже запустила программу test.exe.
Как консоль cmd.exe интерпретирует CTRL+Z? Да так, как захочет.
1) Консоль может преобразовать в ASCII символ и передать его в test.exe.
2) Консоль может интерпритировать комбинацию как команду на закрытие файла***. Это файл который используется для ввода символов*** в программу test.exe.
3) Она может отреагировать и подругому к примеру поменять цвет шрифта.
Это все было 3 предположения так как же на самом деле действует консоль cmd.exe?
На это ответит эксперемент и документация по конкретной ОС и её консоли.
Эксперимент показал что консоль Win Vista интерпретирует нажатие клавиш CTRL+Z, корректнее сказать их коды, как символ. И преобразовывает их скан-коды в код символа который передается в нашу программу. Символ этот имеет код который соотвествует в таблице ASCII стрелочке.
CTL+Z не вызывает генерацию EOF.
Возможно в Windows98 CTRL+Z выполнял функцию EOF, а возможно и нет.
----------------------------------------------------------
* Нет точных рекомендаций что понимать под символом. И тем более понимать EOF как символ или нет?
Лучше EOF не называть символом. Хотя не всегда это возможно.
**Сигнал - посмотрите определение в словаре. В контексте слово использовалось как нечто интуитивно понятное.
***Файл - в данном случае под файлом понимается набор данных,структур используемые ОС, для ввода и вывода данных с использованием так называемых файловых функций.
Символ - данные воспринимаемые и интерпретируемые одновременно ОС, программой, человеком,
компьютером - как число из ASCII таблице.
Есть такая вещь. Как ASCII таблица. Эта таблица описывает правило которое принято для интерпретации данных в виде символов выводимых на экран монитора или печать.
Таблица ASCII была разработана в Америке в последствие была расширена. По настоящее время применяется хотя почти и вытеснена UNICODE.
В ASCII символ имеет номера от 0 до 255. Для хранения одного символа ASCII достаточно байта.
Тип Char в Cи не имеет определённого размера. А размер зависит от платформы. Но чаще всего равен байту.