
- •3.1.1. Функции посимвольного ввода-вывода
- •3.1.1.1.Функции посимвольного ввода
- •Функции посимвольного стандартного ввода Функция getchar
- •Функция fgetchar
- •Функция ungetch
- •Функция getch
- •Функция getche
- •Функции посимвольного потокового ввода Функция fgetc
- •Функция getc
- •Функция ungetc
- •3.1.1.2. Функции посимвольного вывода
- •Функции стандартного вывода Функция putchar
- •3.1.2.Форматированный ввод-вывод
- •3.1.2.1.Форматированный ввод Функция scanf
- •Функция cscanf
- •Управляющая строка функций ввода
- •Модификатор
- •Символы преобразования и их смысл Тип переменной int
- •Тип переменной char
- •Тип переменной char*
- •Тип переменной float
- •3.1.2.2.Форматированный вывод Функция printf
- •Функция cprintf
- •Отдельные поля спецификации преобразования Флаги
- •Точность
- •Модификатор
- •Символы преобразования и их смысл Тип переменной int
- •Тип переменной char
- •Тип переменной char*
- •Тип переменной float
- •3.1.3. Функции построчного ввода-вывод
- •3.1.3.1.Функции построчного ввода Функция cgets
- •3.1.3.2.Функции построчного вывода Функция cputs
- •Лекция №2(продолжение)
- •4.1. Библиотека iostream
- •Буферизованные потоки (класс streambuf )
- •Потоковый класс ios
- •4.2.2. Потоковый ввод
- •4.3. Форматирование потокового ввода-вывода
- •4.3.1. Форматирующие функции-элементы
- •4.3.2. Флаги форматирования
Лекция №4
3. ФУНКЦИИ СТАНДАРТНОГО И ФОРМАТНОГО ВВОДА-ВЫВОДА
3.1. Основы ввода-вывода в языке С
Функции ввода-вывода можно разделить на 4 группы:
функции посимвольного ввода-вывода, за одно обращение к которым переносится один символ;
функции построчного ввода-вывода, за одно обращение к которым переносится ASCIIZ–строка символов;
функции блокового ввода-вывода, за одно обращение к которым переносится целый блок(или запись) информации;
функции форматированного ввода-вывода, при выполнении которых осуществляется присваивание значений переменным(ввод) или вывод представления переменных в поток.
Различают функции стандартного ввода-вывода, которые предназначены для ввода-вывода данных с клавиатуры. Кроме того отметим, что в стандартной библиотеке ввода/вывода некоторые "функции" на самом деле могут быть макросами. Это позволяет избежать накладных расходов на обращение к функции для обработки каждого символа.
Обращение к стандартной библиотеке.
Каждый исходный файл, который обращается к функции из стандартной библиотеки, должен вблизи начала содержать строку
#include <stdio.h> или(и) #include <conio.h>
В файлах stdio.h и conio.h определяются некоторые макросы и переменные, используемые библиотекой ввода/вывода. Использование угловых скобок вместо обычных двойных кавычек - указание компилятору искать этот файл в справочнике, содержащем заголовки стандартной информации (на системе UNIX обычно lusrlinelude).
Самостоятельная проработка:
3.1.1. Функции посимвольного ввода-вывода
3.1.1.1.Функции посимвольного ввода
В случае успеха функции возвращают прочитанный символ после его преобразования в int без учета знака.
Функции возвращают значение EOF в случае ошибки или когда попадают на конец файла, какой бы ввод они при этом не считывали. Стандартная библиотека полагает символическую константу EOF равной -1 (посредством #define в файле stdio.h), но проверки следует писать в терминах EOF, а не -1, чтобы избежать зависимости от конкретного значения.
Функция |
Назначение |
#include <stdio.h> int getchar(void); |
Возвращает символ из файла стандартного ввода. Является макроопределением через функцию getc(). |
#include <stdio.h> int _fgetchar(void); |
Возвращает символ из файла стандартного ввода. |
#include <stdio.h> int fgetc(FILE *stream); |
Возвращает символ из открытого файла, описываемого переменной типа FILE , на которую указывает stream . |
#include <stdio.h> int getc(FILE *stream);
|
Возвращает символ из открытого файла, описываемого переменной типа FILE , на которую указывает stream . Является макроопределением через функцию _fgetc(). |
#include <conio.h> int getch(void); |
Выполняет ввод символа с клавиатуры без эхо- отображения на экране. |
#include <conio.h> int getche(void); |
Выполняет небуферизуемый ввод символа с клавиатуры с эхо- отображением на экране. |
#include <conio.h> int ungetch(int ch); |
Записывает непосредственно в буфер клавиатуры символ ch. |
#include <stdio.h> int ungetc(int c, FILE *stream); |
Возвращает символ int c назад в поток stream. Следующая операция чтения из файла stream будет возвращать символ c. |
Функции посимвольного стандартного ввода Функция getchar
Самый простой механизм ввода заключается в чтении по одному символу за раз из "стандартного ввода", обычно с терминала пользователя, с помощью функции getchar.
Форма записи:
#include <stdio.h>
int getchar(void);
Функция getchar() при каждом к ней обращении возвращает следующий вводимый символ. В большинстве сред, которые поддерживают язык С++, терминал может быть заменен некоторым файлом с помощью обозначения < : если некоторая программа prog использует функцию getchar то командная строка
prog < infile
приведет к тому, что prog будет читать из файла infile, а не с терминала. Переключение ввода делается таким образом, что сама программа prog не замечает изменения; в частности строка"<infile" не включается в командную строку аргументов в argv. Макро getchar идентична getc(stdin).
Пример:
#include <stdio.h>
int main(void)
{ char ch;
printf("Enter a character followed by <Enter>: ");
ch = getchar();
printf("The character read is: '%c'\n", ch);
return 0;
}
Функция fgetchar
Функция
#include <stdio.h>
int fgetchar(void);
читает отдельный текущий символ из стандартного потока stdin и увеличивает cсоответствующий указатель (если он есть) для указания следующего считываемого символа. Функция fgetchar является эквивалентной функции fgetc(stdin).
Пример:
#include <stdio.h>
int main(void)
{ char ch;
printf("Enter a character followed by <Enter>: ");
ch = fgetchar();
printf("The character read is: '%c'\n", ch);
return 0;
}