Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

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

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

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

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

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

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

 

Ниже представлены сокращенные заголовки некоторых функций для вывода в стандартный поток 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.

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

#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 %

}

 

 

8.4. Функции для считывания из потока stdin

Рассмотрим некоторые функции для считывания из стандартного потока stdin, по умолчанию связанного с клавиатурой. Все данные функции останавливают выполнение программы и ждут ввода с клавиатуры, после ввода данных требуется нажать клавишу «Enter».

Чтение символа:

int getchar();

функция возвращает код символа. Пример вызова:

char Ch;

Ch=getchar();

Чтение строки символов:

char * gets(char * s);

s – указатель на массив, куда записывается строка, строка читается пока во входном потоке не появится символ «\n» (на клавиатуре нажата клавиша «Enter»), при этом в строку записывается символ с кодом 0, возвращаемое значение адрес строки или NULL в случае ошибки.

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

char Str[64];

printf(“Введите строку символов:”); gets(Str);

Считывание данных и запись их в переменные в соответствии с заданным форматом:

int scanf(const char * format, …);

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

Шаблон преобразования начинается с символа «%», формат шаблона преобразования:

%[*][width][h:l:L]type

«*» - необязательный символ, в этом случае поле сканируется, но в память не записывается, используется для пропуска полей;

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

[h:l:L] - то же самое, что и в printf;

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

«d» - тип int * (при вводе в качестве параметра передается адрес переменной – передача параметра по указателю), целая переменная в десятичной системе счисления;

«i» - тип int *, целое может вводится в десятичной, восьмеричной (0 в начале) или шестнадцатеричной (0x или 0X в начале) системах счисления;

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

«x», «X» - тип int *, целая переменная в шестнадцатеричной системе счисления (с или без 0x/0X впереди);

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

«c» - тип char *, ввод отдельного символа;

«s» - тип char *, ввод строки, автоматически в конец строки (массива символов) записывается символ с кодом 0, следует отметить, что строка считывается из входного потока до любого символа разделителя, включая «пробел»;

«f», «e», «E», «g», «G» - тип float *, при вводе эти символы эквивалентны, ввод вещественного в форме с точкой или со знаком экспоненты;

«%» - присваивание не выполняется, просто в строке символ «%», обозначает, что во входном потоке должен быть символ «%».

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

#include <stdio.h>

void main()

{

float x;

int a;

char Ch;

double X;

char Str[64];

printf("x, a, Ch: ");

scanf("%f %d %c", &x, &a, &Ch);

// Надо вводить значения через пробелы как в строке format

printf("x=%f a=%d Ch=%c", x, a, Ch);

printf("\nX="); scanf("%lf", &X); // Ввод типа double

printf("Str: "); scanf("%s", Str); // Ввод строки

printf("propusk: "); scanf("%*d.%d", &a);

// Если в потоке вводится 10.12 то в a запишется 12

printf("X=%f Str: %s a=%d", X, Str, a);

}

 

<== предыдущая лекция | следующая лекция ==>
Общие сведения о вводе-выводе | Закрытие файла
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 368; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.021 сек.