Флэширование буфера ввода


Функция 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; просмотров: 1616;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.