Элементарный ввод-вывод средствами стандартной библиотеки.

 

Рассмотрим некоторые функции стандартной библиотеки языка для ввода информации с клавиатуры и ее вывода на экран.

Консольный ввод-вывод может быть двух видов: форматированный и неформатированный. Форматированный ввод-вывод дает возможность обрабатывать за одно обращение к библиотечной функции несколько элементов, выполняя, если необходимо, преобразование данных. Две функции-компаньона scanf() и printf() выполняет соответственно консольный ввод и вывод. Этим функциям передается переменное число аргументов, но первым аргументом всегда является текстовая, так называемая форматная строка. Она задает способ преобразования данных.

Функция printf() выдает на экран всю форматную строку, в которой знак %хххзаменяется символами выводимой информации. Символы после % до первого разделителя рассматривается как спецификация преобразования значения выводимой переменной. Имя переменной – это второй, третий и т.д. аргументы списка аргументов.

Пример.

Int i,j;

printf("i=%d j=%d/n", i,j);

 

Функция scanf() принимает с консоли все символы до нажатия клавиши ENTER и помещает их в буфер. Затем по форматной строке определяется способ преобразования введенных символов в соответствии с заданными спецификациями. Полученное в результате преобразования число помещается по адресу переменной, который является вторым, третьим и т.д. аргументами в списке аргументов функции. Спецификация преобразования задается в виде последовательности.

 

%[флаги][ширина][.точность][модификатор]<тип>

 

В следующих двух таблицах перечисляются некоторые из знаков, задающих спецификацию преобразования данных.

 

Тип преобразования Производимый эффект Пример
с Тип переменной char. При вводе читается и передается один байт или символ. При выводе переменная преобразуется к типу char. а
dилиi Десятичное int со знаком.
e Значение float со знаком в форме [-]d.dddde[+|-] ddd 3.9265e+2
E Значение floatсо знаком в форме [-]d.ddddE[+|-] ddd 3.9265E+2
f Значение floatсо знаком в форме [-]dddd.dddd 392.65
g Значение floatсо знаком в формате e или f в зависимости от значения и специфицированной точности. 392.65
G Значение floatсо знаком в формате E или f в зависимости от значения и специфицированной точности. 392.65
o Восьмеричное знаковое int 610
s Символьная строка. При вводе принимает символы до тех пор, пока не встретится символ ‘\n’ или пока не достигнута специфицированная точность. В программу передаются символы до ‘\n’ или пробела. При выводе выдает все символы до тех пор, пока не встретится символ ‘\n’ или пока не достигнута специфицированная точность. sample
u Десятичное intбез знака 7235
x Шестнадцатеричное intбез знака. При выводе для числа используются символы 0 – f. 7fa
X Шестнадцатеричное intбез знака. При выводе для числа используются символы 0 – F. 7FA
p Указатель адреса B800:0000

 

Элемент спецификации Производимый эффект
Флаги  
- Производится выравнивание влево выводимого числа в пределах выделенного поля. Правая сторона выделенного поля дополняется пробелами. По умолчанию устанавливается выравнивание вправо.
+ Выводится знак числа символом ‘+’ или ‘-’.
Пробел Выводится пробел перед числом, если оно положительное. Для отрицательных чисел знак минуса выводится всегда.
  # Выводится идентификатор системы счисления для целых: - 0 перед числом, выводимым в восьмеричной с/с; - 0х или 0Х для чисел, выводимых в шестнадцатеричной с/с; - ничего для чисел, выводимых в десятичной с/с. Для чисел типа float выводится десятичная точка.
Ширина   Воздействует только на вывод
n Определяет минимальную ширину поля в n символов. Если после преобразования ширины недостаточно, выводится столько символов, сколько есть. Незаполненные позиции дополняются пробелами.
0n Все то же самое, но позиции слева для целого числа заполняются нулями.
* Следующий аргумент из списка аргументов задает ширину.
Точность   Воздействует только на вывод
Ничего Точность по умолчанию
.0 Для d,i,o,u,x точность по умолчанию. Для e,E,f десятичная точка отсутствует.
.n Для e,E,f не более n знаков после точки.
* Следующий аргумент из списка аргументов задает точность.
Модификатор Длины     Воздействует там, где применимо
h Для d,i,o,u,x,X аргумент является short int
l Для d,i,o,u,x,X аргумент является long int  
L Для e,E,f,g,G аргумент является long double

 

Пример для функция printf():

int main(){ printf ("Символы: %c %c \n", 'a', 65); printf ("Десятичные числа: %d %ld \n", 1977, 650000); printf ("Числу предшествуют пробелы: %10d \n", 1977); printf ("Числу предшествуют нули: %010d \n", 1977); printf("Разные системы счисления:\n”); printf(" %d %x %o %#x %#o \n", 100, 100, 100, 100, 100); printf("floats: %4.2f %+.0e %E \n",3.141,3.141,3.141); printf ("Десятичное число: %*d \n", 5, 10); printf ("%s \n", "Строка"); return 0;}

 

Результат:

 

Символы: a AДесятичные числа: 1977 650000Числу предшествуют пробелы: 1977Числу предшествуют нули: 0000001977 Разные системы счисления100 64 144 0x64 0144floats: 3.14 +3e+000 3.14100E+000Десятичное число: 10Строка

 

Пример для функция scanf ():

 

int main (){ char str[80]; int i; printf ("Введите Вашу фамилию: "); scanf ("%s",str); printf ("Введите ваш возраст: "); scanf ("%d",&i); printf ("Товарищу %s %d лет.\n",str,i); printf("Задайте шестнадцатерич. число:"); scanf ("%x",&i); printf ("Вы ввели %#x (%d).\n",i,i); return 0;} Результат: Введите Вашу фамилию:Иванов

Введите ваш возраст:29

ТоварищуИванов 29лет.

Задайте шестнадцатерич. число::ff

Вы ввели0xff(255).

 

Функции неформатированного консольного ввода-вывода работают с отдельными символами или строками символов. Для ввода символа используется функция getchar(), не имеющая аргументов и возвращающая целое число. Для вывода символа используется функция putchar(int).

int main (){ char c; puts("Задайте текст.Для выхода ввести ('.')"); do { c=getchar(); putchar (c); } while (c != '.'); return 0;}

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








Дата добавления: 2016-04-22; просмотров: 768;


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

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.