Функция форматированного ввода/вывода
Использование в программе функций ввода/вывода требует подключения библиотеки 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. Вывести на экран текст в таком виде:
Напишите решение данной задачи, используя форматированный ввод/вывод данных и стандартные потоки ввода-вывода данных.
- Напишите программу, которая выводит на экран фразу: «Каждый охотник желает знать, где сидит фазан». Каждое слово фразы должно быть выведено с новой строки с отступом на одну позицию табуляции вправо от предыдущий строки. Напишите решение данной задачи, используя форматированный ввод/вывод данных и стандартные потоки ввода-вывода данных.
- Напишите программу, которая выводит на экран:
Меня зовут ФИ.
Учусь на направлении подготовки «Указать свое направление».
В школе на информатике изучал …
Дата добавления: 2021-07-19; просмотров: 257; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!