Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C_lect.doc
Скачиваний:
32
Добавлен:
12.11.2018
Размер:
856 Кб
Скачать
☆

8.2. Стандартные потоки ввода-вывода

Для связи потока с внешним устройством в файле stdio.h определена структура типа FILE, также определены следующие стандартные указатели на структуру типа FILE:

  • stdin – стандартный поток ввода, по умолчанию клавиатура;

  • stdout – стандартный поток вывода, по умолчанию монитор (консольное окно);

  • stderr – стандартное устройство вывода сообщений об ошибках, по умолчанию монитор (консольное окно);

  • stdaux – стандартный последовательный порт;

  • stdprn – стандартный принтер.

Потоки stderr и stdaux – не буферизированы, остальные буферизированы.

8.3. Функции для вывода в поток stdout

Ниже представлены сокращенные заголовки некоторых функций для вывода в стандартный поток stdout, связанный с экраном монитора (консольным окном).

Вывод (печать) символа:

int putchar(int c);

параметр c задает код печатаемого символа, функция возвращает код символа.

Пример вызова:

putchar(‘A’);

Вывод (печать) строки:

int puts(const char * s);

s – указатель на строку, строка заканчивается символом с кодом 0, при выводе строки на печать в конец добавляется \n (переход на новую строчку), возвращаемое значение - код последнего символа, всегда \n или значение EOF в случае ошибки. EOF (End Of File) – константа, объявленная в заголовочном файле stdio.h, ее значение равно -1.

Пример вызова:

puts(“Hello world”);

Вывод данных в соответствии с заданным форматом (форматированный вывод):

int printf(const char *format, …);

функция с переменным количеством параметров, параметр format - указатель на строку, данная строка выводится на консоль без изменений, за исключением шаблонов преобразования, которые могут присутствовать в строке. Как правило, число шаблонов преобразования соответствует числу необязательных параметров, которые присутствуют при вызове функции, порядок следования шаблонов преобразования в строке соответствует порядку необязательных параметров функции. Каждый шаблон преобразования задает формат вывода, соответствующего ему параметра, при выводе строки шаблон преобразования заменяется параметром в заданном им формате. Возвращаемое значение – число выведенных (напечатанных) символов.

Шаблон преобразования в строке всегда начинается с символа «%». Формат шаблона преобразования:

%[flags][width][.prec][h:l:L]type

flags может быть одним из символов:

«-» - надпись выравнивается по левому краю (по умолчанию по правому),

«+» - числу должен предшествовать знак (перед положительным числом ставится знак «+»),

«#» - случай будет рассмотрен ниже, после разбора поля type;

width – целая константа, задает минимальную ширину поля вывода в символах;

prec – целая константа, задает максимальное число выводимых символов, или число цифр после точки при выводе вещественных чисел;

h:l:L – префиксы используются для работы с целыми или вещественными значениями, чтобы показать, что аргумент short, long (double);

type - определяет тип аргумента и формат его вывода, возможные значения это символы:

«d», «i» - тип int, вывод целого в десятичной системе счисления;

«o» - тип int, вывод целого в восьмеричной системе счисления (без 0 впереди);

«x», «X» - тип int, вывод целого в шестнадцатеричной системе счисления (без 0x или 0X впереди) c применением соответственно цифр abcdef и ABCDEF;

«u» - тип unsigned int, вывод целого без знака в десятичной системе счисления;

«c» - тип int (к нему приводится тип char), вывод отдельного символа, символ задается своим кодом;

«s» - тип char *, вывод символов строки, строка должна заканчиваться символом с кодом 0;

«f» - тип double, вывод вещественного в форме с точкой;

«e», «E» - тип double, вывод вещественного в форме со знаком экспоненты (печатается символ e или E);

«g», «G» - тип double, использует более короткий из форматов %е/%E или %f;

«p» - тип void *, печать значения указателя;

«%» - преобразование аргументов не выполняется, печатается символ «%».

Рассмотрим теперь назначение в качестве флага символа «#», символ используется с некоторыми типами аргументов. Поставленный перед кодами g, G, f, e и Е, он гарантирует наличие десятичной точки даже в случае отсутствия десятичных цифр после точки. Если поставить символ «#» перед кодами формата х и X, то шестнадцатеричное число будет выведено с префиксом 0х или 0Х. Если же его поставить перед форматом «о», то восьмеричное число будет выведено с префиксом 0.

Примеры использования функции:

#include <stdio.h>

void main()

{

double x=10.55, y=-12.333;

int a1=10, a2=20;

char Str[]="Hello world";

char Ch='A';

printf("x=%fy=%fa1=%da2=%d", x, y, a1, a2);

// Печатается x=10.550000y=12.333000a1=10a2=20

printf("\nx=%8.2fy=%-8.2fa1=%+4da2=%3d", x, y, a1, a2);

// Печатается x= 10.55y=-12.33 a1= +10a2= 20

printf("\n%s %c %%", Str, Ch); // Печатается Hello world A %

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]