logo
шпоры по ООП

36.Стандартный ввод-вывод.

Стандартные манипуляторы ввода-вывода

Это следующие манипуляторы:

// Simple manipulators:

ios& oct(ios&); // в восьмеричной записи

ios& dec(ios&); // в десятичной записи

ios& hex(ios&); // в шестнадцатеричной записи

ostream& endl(ostream&); // добавить '\n' и вывести

ostream& ends(ostream&); // добавить '\0' и вывести

ostream& flush(ostream&); // выдать поток

istream& ws(istream&); // удалить обобщенные пробелы

// Манипуляторы имеют параметры:

SMANIP<int> setbase(int b);

SMANIP<int> setfill(int f);

SMANIP<int> setprecision(int p);

SMANIP<int> setw(int w);

SMANIP<long> resetiosflags(long b);

SMANIP<long> setiosflags(long b);

Например,

cout << 1234 << ' '

<< hex << 1234 << ' '

<< oct << 1234 << endl;

напечатает 1234 4d2 2322

и cout << setw(4) << setfill('#') << '(' << 12 << ")\n";

cout << '(' << 12 << ")\n";

напечатает (##12) (12)

Не забудьте включить файл <iomanip.h>, если используете манипуляторы с параметрами.

33.Управление вводом-выводом в С++

C++ имеет целое семейство гибких библиотек функций ввода/вывода. В С++ было введено понятие потоков. С помощью потока cout можно выводить данные в форматированном виде. Для этого используются потоковые функции Width

Precision

Функция width задает ширину поля вывода, общая форма:

сout. width (width of output);

Функция precision определяет количество значащих цифр для чисел с пла-вающей точкой.

сout. precision (number of Digits)

// вывод элементов матрицы

cout << " матрица А:" << endl;

for (int i=0; i < rows; i++)

{

for (int j=0; j{

cout. width (4);

cout. precision (1);

cout << matrix [ i ] [ j ] << " ";

}

cout << endl;

}

cout << endl;

Функция printf.

Printf - стандартный оператор ввода. Эта функция имеет несколько мощных возможностей, и в ряде случаев она оказывается удобнее функции потоков.

Общая форма:

int printf (cout char*format [, argument,...] )

Параметр format является символьным массивом, содержащим выводимый текст. Mассив format может содержать специальные форматирующие символы, которые выполняют преобразование необязательных аргументов при выводе.

- - выравнивать вывод по левому краю поля

+ - всегда выводит знак числа

пробел - выводить пробел перед положительным числом и знак минус перед отрицательным

# - не влияет на вывод десятичных целых чисел, для шестнадцатеричных выводит префикс Ox или OX, перед восьмеричными целыми выводит ноль, деся-тичную точку для вещественных чисел.

Спецификация width определяет минимальное количество выводимых сим-волов. Если необходимо, используются заполнители - пробелы или нули. Когда значение width начинается с 0, printf использует в качестве заполнителей нули, а не пробелы. Если в качестве значения для width используется универсальный символ *, а не число, то printf подставляет на место этого символа значение, кото-рое должно содержаться в списке аргументов. Это значение должно предшество-вать выводимому значению. Ниже приведен пример вывода числа 2, занимающе-го три позиции согласно значению второго аргумента printf:

printf (" % * d ", 3, 2);

Спецификатор precision определяет максимальное количество выводимых цифр. В случае целого числа он определяет минимальное количество выводимых символов. Для precision также можно применить символ *, вместо которого будет подставлено значение из списка аргументов. Это значение точности представле-ния должно предшествовать выводимому значению. Ниже приведен пример вы-вода числа с плавающей точкой 3.3244 с использованием десяти символов, как это задано вторым аргументом printf.

Print (" % 7. * f ", 10, 3.3244);

Символы F, N, h, 1, L являются символами размера, предопределяющими размер по умолчанию. Символы F и N применяются с указателями far и near соот-ветственно символы h, 1, L используются для указания соответственно типов short int, long, long double.

Символом типа данных должен предшествовать форматирующий символ %.

// Программа, использующая PRINTF для форматированного вывода

# include

int. main ( )

{ int anint = 67;

unsegned char a byte = 128;

float a sisnal = 388.0;

char a char = "G";

double a double = 1.130e + 00 ;

Printf (" %3d + %2d = %3d (n" a Byte, anInt, a Byte + anInte");

Printf (" вывод вещественного числа / n");

Printf (" % 6.4 f / % 64 IF = % 7.5 IF / n , a signal, a Double, a Signale / a Double);

Printf ("вывод вещественного числа в экспоненциалъной форме / n");

Printf (" % 6.4e / % 6.4le = % 7.5le / n", a Signle, a Double, a Signle / a Double);

Printf ("вывод вещественного числа / n");

Printf ((" % 6.4g / % 6.4lg = % 7.5Ig / n, "a Signle, a Double, a Signle / a Double);

Printf (" Символ в переменной величине символа : % c / n", a char);

Printf ( ASСII коде для % с ig % d / n", a char, a char );

Return 0;

}

Пример вывода программы.

28+67= 195

Вывод в формате вещественного числа:

355.000 /113.0000=3.14159

Вывод вещественного числа в экспоненциальной форме:

3.5500e+002/1.1300e+002=3.14159e+00

Вывод вещественного числа

355/113=3.1416