Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DOROGOVA.pdf
Скачиваний:
245
Добавлен:
05.06.2015
Размер:
853.4 Кб
Скачать

символ "а" будет помещен в переменную x;

<пробел> будет помещен в в переменную y;

символ "б" будет помещен в переменную z.

11.1.6. Сравнительная характеристика консольных функций вводавывода

Функции, используемые для ввода и вывода данных, зависят от типа данных и способа их представления. Остановимся на свойствах функций printf() и scanf(), главное из которых возможность работать с самыми разнообразными данными. Например, с помощью одной и той же функции scanf() можно вводить как числовые, так и символьные данные. Кроме того, функции printf() и scanf() позволяют работать со списком из нескольких аргументов, то есть вводить (или выводить) сразу несколько переменных, а также форматировать выводимые данные. Итак, функции printf() и scanf() универсальны и это делает их привлекательными, но с другой стороны следует отметить, что эти функции достаточно громоздкие (занимают много места) и медленно работают. Поэтому для работы с текстовой информацией в состав библиотек входят специальные функции, как для работы с отдельными символами, так и с целыми строками.

Если вы хотите работать с отдельными символами, то наиболее удобно использовать функции getch, getchar() и putchar(). Для работы с целыми строками используйте функции gets() и puts().

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

11.2. Функции ввода-вывода библиотеки iostream

Хотя библиотека iostream относится к языку С++ и не является темой нашего курса, все же мы бегло рассмотрим два потока этой библиотеки - cin и cout. Дело в том, что большинство современных сред программирования поддерживают две полноценные системы ввода-вывода, одна из них относится к языку С, а другая к объектно-ориентированному С++. Многие программисты, не выходящие в своей работе за рамки классического языке С, тем не ме6нее активно пользуются системой ввода-вывода С++, поэтому целесообразно рассмотреть наиболее популятные средства этой библиотеки.

Также как в языке С, система ввода-вывода С++ оперирует потоками. Поток в С++ – это логическое устройство, получающее или передающее информацию. Поток связан с физическим устройством ввода-

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

Потоки, определённые в языке С++:

cin - cтандартный ввод;

cout - cтандартный вывод;

cerr - cтандартная ошибка;

clog - буферизованная версия cerr.

По умолчанию эти потоки связаны с консолью:

∙ cin - с клавиатурой;

cout, cerr, clog - с терминалом.

Операции ввода-вывода языка С++:

вывод <<;

ввод >>.

Пример: Напечатать на терминале строку текста: Пример вывода - 34. cout << "Пример вывода - " << 34;

Пример: Ввести целое число с клавиатуры в переменную x (для того, чтобы ввод произошел, на терминале нужно напечатать число и нажать клавишу ENTER.)

int x; cin >> x;

Пример: Ввести строку текста в статический массив.

char str[80]; cin >> str;

Пример: Ввести строку текста в динамический массив и вывести его на терминал.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

#include <iostream.h> #include <stdlib.h> void main()

{

char *ptr; ptr=(char*)malloc(80); cin >> ptr;

cout<<endl<<"Введена строка : "<<ptr<<endl; free(ptr);

}

11.2.1. Форматирование ввода-вывода

Для форматирования текста и вывода спецсимволов следует использовать манипуляторы, входящие в библиотеку iomanip.h, наиболее популярные из них и приведенные в таблице 11.4.

Манипуляторы выводятся в выходной поток подобно всем остальным объектам вывода.

Таблица 11.4

endl

новая строка (символ '\n')

 

 

ends

конец строки (символ '\0' );

 

 

setw (int n)

ширина поля вывода;

 

 

setprecision(int

количество цифр после запятой;

n)

 

 

 

setfill (int n)

символ-заполнитель;

 

 

flush

Вывести и освободить все буферы;

 

 

setbase(int n)

установить систему счисления (СС)

для всей программы;

 

 

dec

десятичная СС

(только для открытого потока);

 

 

 

Окончание таблицы 11.4

 

 

oct

восьмеричная СС

(только для открытого потока);

 

 

hex

Шестнадцатеричная СС

(только для открытого потока)

 

 

Пример: Вывести на терминал одно и то же число в разных системах счисления: #include <iostream.h>

#include <iomanip.h> int x = 53;

cout << "Десятичный вид:" << x << endl; cout<< "Восьмеричный вид:"<< oct<<x<<endl; cout<< "Шестнадцатеричный вид: "<< hex; cout << x << endl;

Десятичная система счисления устанавливается по умолчанию, поэтому первый вывод не требует её настройки.

Пример: Ввести шестнадцатеричное число c клавиатуры. #include <iostream.h>

#include <iomanip.h> int x;

cin >> hex >> x;

Аналогично используются манипуляторы с параметрами, такие как setfill или setw. Пример: Вывод числа с различной точностью.

#include <iostream.h> #include <iomanip.h> double x=123.4567;

cout<<setfill('*')<<setw(11)<<setprecision(2)<<x;

cout<<setfill('+')<<setw(11)<<setprecision(3)<<x;

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

Первое обращение к потоку cout определяет числовой формат с двумя знаками числа в дробной части, также явно определен символ-заполнитель "пустого" пространства вывода ('*').

Форматы вывода при первом и втором обращении к потоку cout выглядят следующим образом:

*****123.45

++++123.456

Те же манипуляторы, за исключением endl и ends, могут использоваться и при вводе. В этом случае они описывают представление вводимых чисел. Кроме того, имеется манипулятор, работающий только при вводе, это ws. Данный манипулятор переключает вводимый поток в такой режим, при котором все пробелы (включая табуляцию, переводы строки, переводы каретки и переводы страницы) будут вводиться в поток. В обычном режиме, по умолчанию, эти символы воспринимаются как разделители между объектами ввода.

PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]