Функция форматированного ввода/вывода



Использование в программе функций ввода/вывода требует подключения библиотеки stdio.h.

#include <stdio.h>

Оператор вызова функции printf ( ) можно представить так:

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

printf("Вывод целого числа с %d", c);

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

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

Функция printf () возвращает число реально выведенных символов. Если функция возвратит отрицательное значение, то это будет свидетельствовать о наличии ошибки.

Именно такой вариант использован в классической первой программе на языке С++:

#include stdio.h.

void main( )

{
printf ("\n Hello, World!\n");

}

Cимвол '\n' обеспечивает вывод этой фразы с начала новой строки. Второй управляющий символ '\n' переведет курсор к началу следующей строки, где и начнется вывод других сообщений (не связанных с программой) на экран дисплея.

Спецификации преобразования данных предназначены для управления формой внешнего представления значений аргументов функции printf (). Обобщенный формат спецификации преобразования имеет вид:

 % ширина _поля. точность спецификатор

Спецификаторы формата функции printf()

Код Формат
%a Выводит шестнадцатеричное число в форме 0xh.hhhhp+d (только C99)
%A Выводит шестнадцатеричное число в форме 0Xh.hhhhP+d (только C99)
Символ
%d Десятичное целое число со знаком
%i Десятичное целое число со знаком
%e Экспоненциальное представление числа (в виде мантиссы и порядка) (e на нижнем регистре)
%E Экспоненциальное представление числа (в виде мантиссы и порядка) (E на верхнем регистре)
%f Десятичное число с плавающей точкой
%F Десятичное число с плавающей точкой (только C99; если применяется к бесконечности или к нечисловому значению, то выдает надписи INF, INFINITY или NAN на верхнем регистре. Спецификатор %f выводит их эквиваленты на нижнем регистре.)
%g Использует более короткий из форматов %e или %f
%G Использует более короткий из форматов %E или %F
%o Восьмеричное число без знака
%s Символьная строка
%u Десятичное целое число без знака
%x Шестнадцатеричное без знака (строчные буквы)
%X Шестнадцатеричное без знака (прописные буквы)
%p Выводит указатель
%n Соответствующий аргумент должен быть указателем на целое число. (Этот спецификатор указывает, что в целочисленной переменной, на которую указывает ассоциированный с данным спецификатором указатель, будет храниться число символов, выведенных к моменту обработки спецификации %n.)
%% Выводит знак процента

Ширина_поля - целое положительное число, определяющее длину (в позициях на экране) представления выводимого значения.

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

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

Например, если вещественная переменная summa имеет значение 2102.3, то при таком вызове функции

printf("\n summa=%f", summa);

на экран с новой строки будет выведено: summa=2102.3

После выполнения операторов

float с, е;

int k;

с=48.3; k=-83; e=16.33;

printf ("\n c=%f k=%d e=%e", с, k, e);

на экране получится такая строка:

с=48.299999 k=-83 e=1.633e+01

Пример с теми же переменными:

printf ("\n c=%5.2f k=%5d e=%8.2f e=%11.4e", c, k, e, e);

Результат на экране:

с=48.30 k= -83 e= 16.33 e=1.6330e+01

Функция форматированного ввода

Для ввода данных с клавиатуры будем использовать функцию scanf (описана в библиотеке stdio.h).

В общем виде функция выглядит так:

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

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

Аргументами функции могут быть только адреса объектов программы. В языке С++ имеется специальная операция получения адреса –

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

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

int n;

double z, x; 

scanf(“%d%f%f”,&n,&z,&x);

После чтения с клавиатуры последовательности символов18 18 –0.431 переменная n получит значение 18, z – 18.0, x = -0.431.

При чтении входных данных в качестве разделителей используются пробелы, знаки табуляции, символы новых строк. При наборе значений данные начинают вводиться после нажатия клавиши ENTER. До этого они находились в специально отведённой памяти – буфер клавиатуры и одновременно отображаются на экране. До нажатия клавиши ENTER данные можно редактировать.

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

 

В С++ разработана библиотека ввода-вывода iostream, использующая концепцию объектно-ориентированного программирования:

#include <iostream>
Библиотека iostream определяет три стандартных потока:

  • cin стандартный входной поток (stdin в С)
  • cout стандартный выходной поток (stdout в С)
  • cerr стандартный поток вывода сообщений об ошибках (stderr в С)

Для их использования в Microsoft Visual Studio необходимо прописать строку:

using namespace std;

Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:

  • >> получить из входного потока
  • << поместить в выходной поток

Вывод данных

cout << значение;

Здесь значение преобразуется в последовательность символов и выводится в выходной поток:

cout << n;


Возможно многократное назначение потоков:
cout << 'значение1' << 'значение2' << ... << 'значение n';

int n;
char j;
cin >> n >> j;
cout << "Значение n равно" << n << "j=" << j;

Ввод данных

cin >> идентификатор;

При этом из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор:

int n;
cin >> n;

Возможно многократное назначение потоков:
cin >> переменная1 >> переменная2 >>...>> переменнаяn;
При наборе данных на клавиатуре значения для такого оператора должны быть разделены символами (пробел, \n, \t).

int n;
char j;
cin >> n >> j;

Пример программы:
#include <iostream>

#include <locale.h>

using namespace std;

int main()

{

setlocale(LC_ALL, "Russian");

int n;

cout << "Введите n:";

cin >> n;

cout << "Значение n равно: " << n << endl;

cin.get(); cin.get();

return 0;

}

Манипуляторы потока

Функцию - манипулятор потока можно включать в операции помещения в поток и извлечения из потока (<<, >>).

В С++ имеется ряд манипуляторов. Рассмотрим основные:

Манипулятор Описание
Endl Помещение в выходной поток символа конца строки '\n'
Dec Установка основания 10-ой системы счисления
Oct Установка основания 8-ой системы счисления
Hex Установка основания 16-ой системы счисления
setbase Вывод базовой системы счисления
width(ширина) Устанавливает ширину поля вывода
fill('символ') Заполняет пустые знакоместа значением символа
precision(точность) Устанавливает количество значащих цифр в числе (или после запятой) в зависимости от использования fixed
fixed Показывает, что установленная точность относится к количеству знаков после запятой
showpos Показывает знак + для положительных чисел
scientific Выводит число в экспоненциальной форме
get() Ожидает ввода символа
getline(указатель, количество) Ожидает ввода строки символов. Максимальное количество символов ограничено полем количество

 

Пример Использование форматированного вывода

#include <iostream>

using namespace std;

int main()

{

double a = -112.234;

double b = 4.3981;

int c = 18;

cout << endl << "double number:" << endl;

cout << "width(10)" << endl;

cout.width(10);

cout << a << endl << b << endl;

cout << "fill('0')" << endl;

cout.fill('0');

cout.width(10);

cout << a << endl << b << endl;

cout.precision(5);

cout << "precision(5)" << endl << a << endl << b << endl;

cout << "fixed" << endl << fixed << a << endl << b << endl;

cout << "showpos" << endl << showpos << a << endl << b << endl;

cout << "scientific" << endl << scientific << a << endl << b << endl;

cout << endl << "int number:" << endl;

cout << showbase << hex << c << " " << showbase << oct << c << " ";

cout << showbase << dec << c << endl;

cin.get();

return 0;

}
Результат выполнения программы

Еще один пример использования форматированного вывода: для t∈[0;3] с шагом 0,5 вычислить значение y=cos(t).

#include <iostream>

using namespace std;

int main()

{

cout << fixed;

for (double t = 0; t <= 3; t += 0.5) {

     cout.width(3);

     cout.precision(1);

     cout << t;

     cout.width(8);

     cout.precision(3);

     cout << cos(t) << endl;

}

system("pause");

return 0;

}

Результат выполнения

Задания для выполнения

 

1. Реализуйте все примеры, описанные в лабораторной работе.

2. К примеру Использование форматированного вывода добавьте комментарии (в тетради)

3. Создайте 4 переменные с разными типами данных и предложите пользователю ввести в них значения. После ввода, отобразите их на экране. Напишите решение данной задачи, используя форматированный ввод/вывод данных и стандартные потоки ввода-вывода данных.

4. Вывести на экран текст в таком виде:

Напишите решение данной задачи, используя форматированный ввод/вывод данных и стандартные потоки ввода-вывода данных.

  1. Напишите программу, которая выводит на экран фразу: «Каждый охотник желает знать, где сидит фазан». Каждое слово фразы должно быть выведено с новой строки с отступом на одну позицию табуляции вправо от предыдущий строки. Напишите решение данной задачи, используя форматированный ввод/вывод данных и стандартные потоки ввода-вывода данных.
  2. Напишите программу, которая выводит на экран:

Меня зовут ФИ.

       Учусь на направлении подготовки «Указать свое направление».

                  В школе на информатике изучал …


Дата добавления: 2021-07-19; просмотров: 257; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!