- •Предисловие.
- •1. Введение.
- •1.1. История создания языка си.
- •1.2. Стандарты языка си.
- •2. Основные сведения, необходимые для создания программ на языке си.
- •2.1 Процесс создания исполняемого файла.
- •2.2 Распределение памяти программы.
- •2.3 Некоторые основные понятия.
- •2.4 Данные.
- •2.5 Структура простой программы.
- •3. Определение размеров типов данных и объектов.
- •4. Строки и строковые константы.
- •5. Директива препроцессора # define.
- •6. Функции форматированного ввода – вывода.
- •6.1 Функция форматированного вывода printf().
- •6.2 Функция форматированного ввода scanf().
- •7. Операции и операторы.
- •7.1 Арифметические операции
- •7.4 Порядок выполнения операций.
- •8. Выражения и операторы
- •8.1 Выражения.
- •8.2 Операторы.
- •8.3 Составные операторы.
- •8.4 Преобразование типов.
- •8.5 Операция приведения типов.
- •9. Функции ввода и вывода символов.
- •9.1 Функции getchar() и putchar().
- •9.2 Функции getch() и getche().
- •9.3 Ввод и вывод последовательности символов.
- •9.4 Подсчет символов, вводимых с клавиатуры.
- •9.5 Вывод символов из вводимого с клавиатуры файла.
- •9.6 Переключение ввода-вывода данных.
- •10. Принятие решений.
- •10.1 Оператор если (if).
- •10.2 Оператор если - иначе (if else).
- •10.3 Множественный выбор на основе операторов if, else.
- •10.5 Приоритеты операций отношения.
- •10.6 Логические операции (and, or, not).
- •10.7 Операция условия ?:.
- •10.8 Множественный выбор на основе операторов switch, break, default.
- •11. Циклы.
- •11.1 Цикл пока (while).
- •11.2 Цикл для (for).
- •11.4 Операция запятая ,.
- •11.5 Цикл делай пока (do while).
- •11.6 Вложенные циклы.
- •11.7 Операторы выход из структуры (break), продолжение (continue), безусловный переход (to go).
- •Литература.
- •Оглавление.
9.2 Функции getch() и getche().
Для небуферизованного (прямого) ввода используют функции getch() и getche().
Прототипы этих функций int getch(void) и int getche(void) находятся в библиотеках большинства компиляторов в заголовочном файле conio.h. В библиотеках некторых компиляторов эти функции называются _getch() и _getche().
Функция getch() ожидает нажатия клавиши, после которого она немедленно возвращает значение. Причем, символ, введенный с клавиатуры, на экране не отображается. Функция getche() работает так же, как функция getch() но символ, введенный с клавиатуры, на экране отображается.
9.3 Ввод и вывод последовательности символов.
/* ПРОГРАММА:
get_stop_put_1.c - ввод символов с клавиатуры до завершающего символа и вывод их на экран дисплея.
*/
/*#############################################*/
/*============================= include */
#include<stdio.h>
/*============================= define */
#define STOP * /* дает символу * символическое имя STOP */
/*============================= main() */
main()
{/*.---------------------------.begin main() */
char ch;
ch = getchar(); /* строка 9 */
while(ch!= STOP) /* строка 10 /
{/*.---------------------------.begin while */
putchar(ch); / * строка 11 */
ch=getchar(); / * строка 12 */
}/*.---------------------------.end while */
return 0;
}/*.---------------------------.end main() */
/*#############################################*/
РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ.
Программа получает в цикле while символы с клавиатуры до завершающего символа, в данном случае *, и выводит их на экран дисплея.
ПОЯСНЕНИЯ К ПРОГРАММЕ.
-
В строке 10 введена операция отношения !=, которая означает "не равно". В результате всего этого цикл while будет осуществлять чтение и печать символов до тех пор, пока не поступит признак STOP, т.е. ввод символа *.
-
Если в системе программирования реализован небуферизованный ввод, результат может выглядеть, например, следующим образом: ИИннттеерреесснноо,, ppаaббooттaаеeтт ллии ооннаа**. При вводе все символы вплоть до признака STOP (*), отображаются на экране (эхо-печать). Дублируются даже пробелы.
-
Если в системе программирования реализован буферизованный ввод, программа не начнет работать до тех пор, пока вы не нажмете на клавишу [ввод] /* строка 9 */. Затем программа последовательно читает строку по одному символу и также по одному символу выводит на печать до тех пор, пока не встретит символ *. Результат может выглядеть, например, так: Интересно, работает ли она *
-
Замените функцию getchar() на функцию getch(), чтобы исключить неоднозначность работы функции getchar() в различных системах программирования и посмотрите, каков будет результат работы программы.
-
Если переопределить признак STOP на #define STOP '\n' программа закончит работу при введении одной строки, т.к. символ новая строка '\n' пересылается при нажатии клавиши [ввод].
***************************************************************
Программа, приведенная ниже, делает то же самое, что и программа get_stop_put_1.c, но стиль ее написания лучше отвечает духу языка Си:
/* ПРОГРАММА:
get_stop_put_2.c - ввод символов с клавиатуры до завершающего символа и вывод их на экран дисплея.
*/
/*#############################################*/
/*============================= include */
#include<stdio.h>
/*============================= define */
#define STOP *
/*============================= main() */
main()
{/*.---------------------------.begin main() */
char ch;
while ((ch=getchar()) != STOP) putchar (ch); /* строка 8 */
return 0;
}/*.---------------------------.end main() */
/*#############################################*/
РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ.
Программа get_stop_put_2 делает то же самое, что и программа get_stop_put_1.
ПОЯСНЕНИЯ К ПРОГРАММЕ.
Одна строка 8 программы get_stop_put_2 заменяет строки 9, 10 и 12 программы get_stop_put_1.
Как работает оператор на строке 8?
Рассмотрим содержимое внутренних скобок: ch = getchar(). Это - выражение. Его смысл заключается в вызове функции getchar() и присваивании полученного значения переменной ch. Одним таким действием выполняется то, чему в программе get_stop_put_1 были посвящены строки 9 и 12.
Напомним, что любое выражение имеет значение и что значение выражения, включающего в себя операцию присваивания, совпадает со значением переменной, расположенной слева от знака = . Следовательно, значение выражения (ch = getchar()) - это величина переменной ch, так что (ch = getchar()) != STOP имеет то же действие, что и ch != STOP. Тем самым выполняется проверка, которую в программе get_stop_put_1 осуществлял оператор, расположенный в строке 10.
Конструкции подобного сорта (объединение в одном выражении операций присваивания и сравнения) довольно часто используются при программировании на языке Си: Данная форма записи обладает тем преимуществом, что позволяет объединять в одном выражении проверку условия окончания цикла и действие по изменению одного из операндов операции сравнения. Подобная структура очень напоминает рассуждения, которыми мог бы сопровождаться данный процесс: "Я читаю символ, анализирую его и решаю, что делать дальше (продолжать выполнение цикла или выйти из него)".
***************************************************************