Главная » Статьи » Программирование » С/С++

Операторы форматного вывода и ввода

Функции prinf() и scanf()

 

Функции prinf()  и scanf() осуществляют форматированный ввод и вывод на консоль.

Форматированный ввод и вывод означает, что функции могут читать и выводить данные в разном формате.

Функция prinf() имеет прототип в файле stdio.h

 

Синтаксис функции:

 

printf(форматная_строка, список_аргументов);

 

Управляющая строка содержит два типа информации: символы, которые непосредственно выводятся на экран, и команды формата (спецификаторы формата), определяющие, как выводить аргументы.

Команда формата начинается с символа % за которым следует код формата. Команды формата указаны в таблице.

 

Команды формата

%c

Символ

%d

Целое десятичное число

%i

Целое десятичное число

%e

Десятичное число в виде x.xx e+xx

%E

Десятичное число в виде x.xx E+xx

%f

Десятичное число с плавающей запятой x.xxxx

%F

Десятичное число с плавающей запятой x.xxxx

%g

%f или %e, что короче

%G

%F или %f, что короче

%o

Восьмеричное число

%s

Строка символов

%u

Беззнаковое десятичное число

%x

Шестнадцатеричное число 5a5f

%X

Шестнадцатеричное число 5A7F

%%

Символ %

%p

Указатель

%n

Указатель

 

Кроме того, к командам формата могут быть добавлены модификаторы l и h, например:

%ld – печать long int;

%hu – печать short unsigned;

%Lf – печать long double.

 

Между знаком % и форматом команды может стоять целое число. Оно указывает на наименьшее поле, отводимое для печати. Если строка или число больше этого поля, то строка или число печатается полностью, игнорируя ширину поля. Нуль, поставленный перед целым чмслом, указывает на необходимость заполнить неиспользованное место поля нулями.

 

Пример.

 

Вывод

printf("%05d", 15);

даст результат 00015.

 

 

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

Выравнивание выдачи осуществляется по правому краю поля. Если нужно выровнять по левому краю поля, то сразу за знаком % следует поставить знак минуса.

 

Функция scanf()

 

scanf() – основная функция ввода с консоли. Она предназначена для ввода данных и автоматически преобразует введенное число в заданный формат.

Управляющая строка содержит три типа символов: спецификаторы формата, пробелы и другие символы. Команды или спецификаторы формата начинаются с символа %. Они указаны в таблице.

 

Команды или спецификаторы ввода

%c

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

%d

Чтение десятичного целого

%i

Чтение десятичного целого

%e

Чтение числа типа float

%le

Чтение числа типа double

%h

Чтение short int

%o

Чтение восьмеричного чила

%s

Чтение строки

%x

Чтение шестнадцатеричного числа

%p

Чтение указателя

%n

Чтение указателя в расширенном формате

 

Синтаксис функции:

 

scanf(форматная_строка, список_аргументов);

 

В отличие от функции prntf () аругментами функции scanf() могут быть только адреса объектов программы, в частности, имена переменных.

Пока не углубляясь в детализацию понятия адреса (на следующем занятии) вспомним, что в языке С есть унарная операция получения (взятия) адреса объекта &.

 

Выражение для получения адреса объекта:

&  имя_объекта;

 

Например, для ввода с клавиатуры значений переменных x,y,sum,sr можно записать оператор:

scanf(“%d%d%d%f”,  &x, &y, &sum, &sr);

 

Как было казано выше, знак амперсанда & —  это знак операции «взятие адреса переменной». Подробнее смысл этого действия будет объяснен позже (когда мы будем рассматривать указатели), а пока примем это правило формально.

Форматная строка заключается в кавычки (как и для printf) и состоит из списка спецификаций. Каждая спецификация начинается со знака %, после которого могут следовать

*ширина поля модификатор спецификатор

Из них обязательным элементом является лишь спецификатор. Для ввода числовых данных используются следующие спецификаторы:

d — для целых десятичных чисел (тип int);

u — для целых десятичных чисел без знака (тип unsigned int);

f — для вещественных чисел (тип float) в форме с фиксированной точкой;

е — для вещественных чисел (тип float) в форме с плавающей точкой.

и т.д.

Звездочка в спецификации позволяет пропустить во входном потоке определенное количество символов. Ширина поля — целое положительное число, позволяющее определить число символов из входного потока, принадлежащих значению соответствующей вводимой переменной. Как и в спецификациях вывода для функции printf(), в спецификациях ввода функции scanf() допустимо использование модификаторов h, l, L. Они применяются при вводе значений модифицированных типов:

hd — для ввода значений типа short int;

ld — для ввода значений типа long int;

lf, le — для ввода значений типа double в форме с фиксированной и плавающей точкой;

Lf, Le — для ввода значений типа long double в форме с фиксированной и плавающей точкой.

Например, три величины а, b, c можно ввести одним оператором:

scanf("%f%f%f",&a,&b,&c);

Если последовательность ввода будет такой:

5 3.2 2.4 <Enter>

то переменные получат следующие значения: а = 5,0, b = 3,2, с = 2,4. Разделителем в потоке ввода между различными значениями может быть любое количество пробелов, а также другие пробельные символы: знак табуляции, конец строки. Только после нажатия на клавишу Enter вводимые значения присвоятся соответствующим переменным. До этого входной поток помещается в буфер клавиатуры и может редактироваться.

 

 

Пример 1.

// Вычисление длины окружности

#include <stdio.h>

void main(

{

     float r, L;

     const float PI=3.14159;

     printf(“\n r = ”);

     scanf(“%f”, &r);

     L= 2 * PI * r ;

     printf(“L =  %6.3f”, L);

}

 

Пример 2. //Вычисление суммы двух исел

#include <stdio.h>

#include <conio.h>

main()

{

int a, b, c;  // объявление (описание) переменных

printf ( "Введите два целых числа \n" ); // подсказка для ввода

scanf ( "%d%d", &a, &b );                // ввод данных

c = a + b;              // вычисления (оператор присваивания)   

printf ( "Результат: %d + %d = %d \n", 

         a, b, c );                      // вывод результата

getch();

}

 

 

Категория: С/С++ | Добавил: Алексей (05.10.2014)
Просмотров: 701 | Теги: функции, ввод, Операторы, Данные, вывод, ввод/вывод данных, программирование, С++ | Рейтинг: 5.0/1
Всего комментариев: 0
avatar