
- •Федеральное агентство по образованию
- •Краткая история языка с
- •Особенности и основные понятия языка Си
- •Структура программы
- •Типы данных
- •Классификация типов данных
- •Вещественные
- •Логический
- •Диапазоны представления данных
- •Объявление переменных
- •Константы в языке Си
- •Операции языка Си. Приоритет операций
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные операции
- •Операцияsizeof
- •Операция выбора по условию
- •Операция запятая
- •Приведение типов Неявное преобразование типов
- •Явное преобразование типов
- •Основные средства ввода-вывода на Си Понятие потока
- •Стандартные потоки
- •Функции потокового ввода-вывода
- •Функции ввода
- •Ввод символов
- •Ввод строк
- •Форматированный ввод
- •Операторы языка Си
- •Оператор if
- •Оператор switch
- •Оператор while
- •Оператор do while
- •Оператор for
- •Оператор break
- •Оператор continue
- •Функции вывода на экран
- •Вывод символов
- •Функция вывода строк puts()
- •Форматированный вывод
- •Указатели в языке Си
- •Адресная арифметика
- •Массивы
- •Функции в языке с
- •Прототипы функций
- •Указатели типа void
- •Функции, возвращающие указатели
- •Встраиваемые функции
- •Рекурсивные функции
- •Функции с переменным числом аргументов
- •Аргументы функции main()
- •Область действия и область видимости
- •Локальные переменные
- •Локальные переменные в функции Main()
- •Глобальные переменные
- •Классы памяти
- •Указатели на указатели
- •Указатели и многомерные массивы
- •Массивы указателей
- •Указатели на функции
- •Операции над строками символов Определение длины строки
- •Копирование строк
- •Поиск в строках
- •Преобразования символов в строках
- •Другие функции для работы со строками
- •Преобразования строк в числа
- •Преобразования чисел в строки
- •Функции анализа символов
- •Распределение памяти
- •Манипулирование блоками памяти
- •Типы, определяемые пользователем
- •Перечислимый тип
- •Структуры
- •Сложные структуры
- •Битовые поля в структурах
- •Объединения
- •Работа с файлами Связь между потоками и файлами
- •Типы дисковых файлов
- •Открытие файла
- •Запись и чтение данных
- •Форматированный ввод-вывод Форматированный вывод
- •Int fprintf (file *fp, char *fmt, ...);
- •Форматированный ввод
- •Символьный ввод
- •Символьный вывод
- •Блочный ввод-вывод
- •Закрытие файла
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •69 Лекции по курсу «Языки программирования» Часть III
Функции потокового ввода-вывода
В стандартной библиотеке функций С имеется большое количество функций для ввода-вывода с использованием потоков. Большинство этих функций имеют две разновидности: в одной всегда используются стандартные потоки, в другой поток определяется программистом.
Стандартные функции потокового ввода-вывода
Функции, использующие стандартные потоки |
Функции, требующие указания имени потока |
Назначение |
printf() |
fprintf() |
Форматированный вывод |
vprintf() |
vfprintf() |
Форматированный вывод с переменным списком аргументов |
puts() |
fputs() |
Вывод строк |
putchar() |
putc(), fputc() |
Вывод символов |
scanf() |
fscanf() |
Форматированный ввод |
vscanf() |
vfscanf() |
Форматированный ввод с переменным списком аргументов |
gets() |
fgets() |
Ввод строк |
getchar() |
getc(),fgetc() |
Ввод символов |
perror() |
|
Вывод строк в stderr |
Все эти функции требуют включения в программу заголовочного файла stdio.h. Для функции perror() может понадобиться также файл stdlib.h. Функции vprintf() и vfprintf() требуют еще и включения файла stdargs.h.
Функции ввода
Функции ввода подразделяются на три иерархических уровня:
ввод отдельных символов;
ввод строк;
форматированный ввод.
Ввод символов
Функции ввода символов считывают данные из потока ввода по одному символу за раз, При вызове одной из таких функций она возвращает следующий символ из потока или EOF, если достигнут конец файла или случилась какая-либо ошибка. Символическая константа EOF определена в файле stdio.h и равна -1. Функции ввода символов по-разному выполняют буферизацию и дублирование вводимых символов.
Буферизация означает, что операционная система хранит символы во временном буфере памяти, пока пользователь не нажмет клавишу <Enter>, и только после этого символы попадают в поток ввода stdin. Функции, которые работают без буферизации, выводят символ в stdin немедленно после нажатия соответствующей клавиши.
При дублировании функции ввода копируя введенный символ в потов stdout, т.е. символ появляется на экране.
Функция getchar()
Функция getchar () получает следующий по очередности символ из потока stdin. Она буферизует ввод и дублирует символ на экране. Ее прототип имеет следующий вид:
int getchar(void);
Функция getch()
Функция getch() получает следующий символ из потока stdin. Она вводит символы без буферизации и без дублирования на экране.
Функция getch() не определена в стандам ANSI. Обычно прототип функции getch ()находится в заголовочном фам conio.h и имеет следующий вид:
int getch(void);
Ввод строк
Функции ввода строк считывают из потоков целые строки, т.е. последовательности символов до первого встретившегося символа конца строки. В стандартной библиотеке С имеется функция gets().
Ее прототип выглядит следующим образом:
char *gets(char *str);
Функция gets () принимает в качестве аргумента указатель на строку и возвращает указатель того же типа. Функция считывает символы из потока ввода до тех пор, пока не встретится конец строки (\n). Символ конца строки автоматически заменяется нулевым символом, и вся строка помещается по адресу, указанному аргументом str.