Флэширование буфера ввода
Функция fflush() выполняет флэширование (очистку внутреннего буфера для указанного в качестве параметра потока). В ряде случаев это помогает избежать зацикливания программы. Так, если при вводе данных с помощью функции scanf() обнаруживаются ошибки, то перед повторным запросом на ввод данных необходимо применить флэширование, чтобы избежать зацикливания, поскольку ввод с ошибками не очищает буфер ввода.
Пример
m12:…………………………..
if(scanf(“”, &d) != 1)
{
fflush(stdin);
goto m12;
}
Внутренние форматные преобразования
Для внутренних форматных преобразований можно применить функции sscanf() и sprintf() (stdio.h). Первым аргументом функций является буфер (строка) для получения результатов преобразований (для sscanf) или для получения исходной строки, преобразуемой во внутреннее предстпавление данных (для sprintf).
Пример
#include <math.h>
char buffer[80];
sprintf(buffer, “Аппроксимацией pi является %f\n”, M_PI);
puts(buffer);
M_PI преобразуется в символьное и размещается в buffer.
Пример
char buffer[] = “10.5 67”;
int x; double y;
sscanf(buffer, “%fl%d”, &y, &x);
Данные из строки buffer преобразуются в соответствии с указанными форматами и размещаются в переменных y и x.
Функции неформатированного ввода-вывода
Функции неформатированного консольного ввода-вывода рабoтают с отдельными символами или строками символов (файл прототипов stdio.h). Для ввода символа используется функция getchar(), не имеющая аргументов и возвращающая целое число, соответствующее представлению символа в кодировке ASCIIZ. Для вывода символа используется функция putchar( int ).
Ввод-вывод строк сuмвoлoв выполняют соответственно функции gets(сhar *string) и puts(char *string), где string задает адрес области памяти, в которую помещаются cимвoлы вводимой строки и откуда они выводятся на экран. Функции gets() и puts() пo выполняемым действиям подобны scanf("%s", string) и printf("%s\n", string), соответственно. Однако, функция getsO передает в npoграмму все символы до конца вводимой строки. Поэтому, заменив в npeдыдущей npoграмме строку ввода имени scanf("%s", namе) на строку gets(name) удалось бы ввести как имя, так и отчество и, соответственно, вывести их на экран.
Вопросы для самоконтроля
- Каковы имена стандартных потоков ввода-вывода?
- Что представляют собой аргументы функций scanf() и printf()?
- Для чего используются спецификаторы типов d, i, f, e, E, g, G, s, c в спецификациях форматов в строке форматирования?
- Назначение модификаторов h и l в спецификациях форматов?
- Для чего применяется флэширование в операциях ввода-вывода?
- Перечислите функции для внутренних форматных преобразований!
- Перечислите основные функции для ввода и вывода строк и символов!
- Имя файла прототипов для функций стандартных потоков ввода и вывода?
Дата добавления: 2016-05-26; просмотров: 1714;