Элементарный ввод-вывод средствами стандартной библиотеки.
Рассмотрим некоторые функции стандартной библиотеки языка для ввода информации с клавиатуры и ее вывода на экран.
Консольный ввод-вывод может быть двух видов: форматированный и неформатированный. Форматированный ввод-вывод дает возможность обрабатывать за одно обращение к библиотечной функции несколько элементов, выполняя, если необходимо, преобразование данных. Две функции-компаньона 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; просмотров: 774;