Меню сайта

Урок 33. Дополнительные возможности cin и cout в C++


ЧТО ВНУТРИiostream.h

Начиная с урока 1, каждая написанная вами на C++ программа включала заголовочный файлiostream.h. -Этот файл содержит определения, позволяющие вашим программам использоватьcout -для выполнения вывода иcin -для выполнения ввода. Более точно, этот файл определяет классыistreamostream -(входной поток и выходной поток), a —cin -и соut являются переменными (объектами) этих классов. Выберите время, чтобы напечатать файлiostream.h.Он находится в подкаталоге INCLUDE. Определения в этом файле достаточно сложны. Однако если вы пройдете по файлу медленно, то обнаружите, что большинство определений являются просто определениями классов и констант. Внутри файла вы найдете объявления переменныхcincout.

ИСПОЛЬЗОВАНИЕcout

Как вы уже знаете,cout -представляет собой класс, который содержит несколько разных методов. Следующие программы иллюстрируют использование некоторых методов, которые ваши программы могут применять для форматирования вывода. Из урока 3 вы узнали, что манипуляторsetw -позволяет вашим программам указать минимальное количество символов, которое может занять следующее выходное значение:

#include &lt-iostream.h&gt-

#include &lt-iomanip.h&gt-

void main(void)

{
— — -cout &lt-&lt- «Мое любимое число»&lt-&lt- setw(3) &lt-&lt- 1001 &lt-&lt- endl-
— — -cout &lt-&lt- «Мое любимое число»&lt-&lt- setw (4) &lt-&lt- 1001 &lt-&lt- endl-
— — -cout &lt-&lt- «Мое любимое число»&lt-&lt- setw (5) &lt-&lt- 1001 &lt-&lt- endl-
— — -cout &lt-&lt- «Мое любимое число»&lt-&lt- setw(6) &lt-&lt- 1001 &lt-&lt- endl-
}

Подобным образом методcout.width -позволяет вам указать минимальное количество символов, которое будет использовать сои/для вывода следующего значения. Следующая программа COUTWIDT.CPP использует функцию —cout.width -для выполнения работы, аналогичной той, которую выполняет —setw, -что и показано ниже:

#include &lt-iostream.h&gt-

#include &lt-iomanip.h&gt-

void main (void)

{
— — -int i-
— — -for (i = 3- i &lt- 7- i++)

— — -{
— — — — — -cout &lt-&lt- «Мое любимое число»-
— — — — — -cout. width (i)-
— — — — — -cout &lt-&lt- 1001 &lt-&lt- endl-
— — -}
}

Если вы откомпилируете и запустите вашу программу, на экране дисплея —появится следующий вывод:


С:&gt- COUTWIDT &lt-ENTER&gt-

Мое любимое число1001

Мое любимое число 1001

Мое любимое число 1001

Мое любимое число 1001

Подобно манипуляторуsetw, -ширина, выбираемая с помощью функции —cout.width, -действует только для следующего выходного значения.

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

Если вы используете манипуляторsetw -или функциюcout.width для -управления шириной вывода, cout будет помещать пробелы до (или после для выровненных влево) значений, как это и требуется. В зависимости от назначения вашей программы вы, возможно, захотите использовать символ, отличный от пробела. Предположим, например, что вашапрограмма создает такую таблицу:

Таблица информации
Профиль компании………………………………………… 10
Доходы и убытки компании……………………………..11
Члены правления компании…………………………….13

В данном случае вывод предваряет номера страниц точками. Функция —cout.fill -позволяет вам указать символ, которыйcout -будет использовать для заполнения пустого пространства. Следующая программа COUTFILL.CPP создает таблицу, подобную приведенной выше:

#include &lt-iostream.h&gt-

#include &lt-iomanip.h&gt-

void main(void)

{
— — -cout &lt-&lt- «Таблица информации»&lt-&lt- endl-
— — -cout.fill (» . «)-
— — -cout &lt-&lt- «Профиль компании»&lt-&lt- setw(20) &lt-&lt- 10 &lt-&lt- endl-
— — -cout &lt-&lt- «Доходы и убытки компании»&lt-&lt- setw(12) &lt-&lt- 11 &lt-&lt- endl-
— — -cout &lt-&lt- «Члены правления компании»&lt-&lt- setw(14) &lt-&lt- 13 &lt-&lt- endl-
}

Если вы однажды выбрали символ-заполнитель с помощьюcout.fill, -он будет оставаться действительным, пока вы не измените его повторным вызовомcout.fill.

Управление цифрами значений с плавающей точкой

Если вы используетеcout для -вывода значения с плавающей точкой, то обычно не можете сделать каких-либо предположений о том, сколько цифр будет выводитьco
ut no
-умолчанию. Однако, используя манипулятор
setprecision, -вы можете указать количество требуемых цифр- Следующая программа SETPREC.CPP использует манипуляторsetprecision -для управления количеством цифр, которые появятся справа от десятичной точки:

#include &lt-iostream.h&gt-

#include &lt-iomanip.h&gt-

void main(void)

{
— — -float value = 1.23456-
— — -int i-
— — -for (i = 1- i &lt- 6- i++) —cout &lt-&lt- setprecision(i) &lt-&lt- value &lt-&lt- endl-
}

Когда вы откомпилируете и запустите эту программу, на экране дисплея появится следующий вывод:


С:&gt-SETPREC &lt-ENTER&gt-

1.2

1.23

1.235

1.2346

1.23456

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


ВЫВОД И ВВОД ОДНОГО СИМВОЛА ЗА ОДИН РАЗ

В зависимости от назначения вашей программы вам, возможно, потребуется выводить символы на дисплей или читать с клавиатуры по одному символу за один раз. Для вывода одного символа за один раз ваши программы могут использовать функциюcout.put.Следующая программа COUTPUT.CPP использует эту функцию для вывода на экран сообщения —Учимся программировать на языке C++! -по одному символу за раз:

#include &lt-iostream.h&gt-

void main(void)

{
— — -char string[] = «Учимся программировать на языке C++!»-
— — -int i-
— — -for (i = 0- string[i]- i++) cout.put(string[i]) —
}

Библиотека этапа выполнения предоставляет функцию с именемtoupper, —которая возвращает заглавный эквивалент строчной буквы. Следующая программа COUTUPPR.CPP использует функциюtoupper -для преобразования символа в верхний регистр, а затем выводит эту букву с помощьюcout.put.

#include &lt-iostream.h&gt-

#include &lt-ctype.h&gt- // прот
отип toupper

void main(void)

{
— — -char string[] = «C++ language»-
— — -int i-
— — -for (i = 0- string[i]- i++) cout.put(toupper(string[i]))-
— — -cout &lt-&lt- endl &lt-&lt- «Результирующая строка: «&lt-&lt- string &lt-&lt- endl-
}

Если вы откомпилируете и запустите эту программу, на экране дисплея появится следующий вывод*:

С:&gt- COUTUPPR &lt-ENTER&gt-

C++ LANGUAGE

Результирующая строка: C++ language

* К сожалению, функция toupper применима только к английским буквам. Прим. перев.

ЧТЕНИЕ ВВОДА С КЛАВИАТУРЫ ПО ОДНОМУ СИМВОЛУ ЗА РАЗ

Точно так же, какcout -предоставляет функциюcout.put для -вывода символа, —cinпредоставляет функциюcin.get, -которая позволяет вам читать один символ данных. Чтобы воспользоваться функциейcin.get, -вы просто присваиваете переменной возвращаемый этой функцией символ, как показано ниже:

letter = cin.get()-

Следующая программа CIN_GET.CPP выводит сообщение, в ответ на которое вам необходимо ввести Y или N. Затем она повторяет в цикле вызов cin.get для чтения символов, пока не получит Y или N:

#include &lt-iostream.h&gt-

#include &lt-ctype.h&gt-

void main(void)

{
— — -char letter-
— — -cout &lt-&lt- «Хотите продолжать? (Y/N): «-
— — -do

— — -{
— — — — — -letter = cin.get()-
— — — — — — — — -// Преобразовать к верхнему регистру
— — — — — -letter = toupper(letter)-
— — -} while ((letter != «Y») &amp-&amp- (letter != «N»))-
— — -cout &lt-&lt- endl &lt-&lt- «Вы ввели «&lt-&lt- letter &lt-&lt- endl-
}

ЧТЕНИЕ С КЛАВИАТУРЫ ЦЕЛОЙ СТРОКИ

Как вы уже знаете, при использованииcin -для выполнения ввода с клавиатуры,cinиспользует пустые символы, такие как пробел, табуляция или возврат каретки, для определения, где заканчивается одно значение и начинается другое. Во многих случаях вы захотите, чтобы ваши программы считывали целую строку данных в символьную строку. Для этого программы могут использовать функциюcin.getline. -Для использованияcin.getline -вам необходимо указать символьную строку, в которую будут помещаться символы, а также размер строки, как показано ниже:

cin.getline(string, 64)-

Когдаcin.get -читает символы с клавиатуры, она не будет читать символов больше, чем может вместить строка. Удобным способом определить размер массива является использование оператора C++ —sizeof, -как показано ниже:

сin.getline(string, sizeof(string))-

Если позже вы измените размер массива, то вам не нужно будет искать и изменять каждый оператор сcin.get, -встречающийся в вашей программе. Вместо этого операторsizeof» будет использовать корректный размер массива. Следующая программа GETLINE.CPP использует функциюcin.getline -для чтения с клавиатуры строки текста:

#include &lt-iostream.h&gt-

void main(void)

{
— — -char string[128]-
— — -cout &lt-&lt- «Введите строку текста и нажмите Enter» &lt-&lt- endl-
— — -cin.getline(string, sizeof(string))-
— — -cout &lt-&lt- «Вы ввели: «&lt-&lt- string &lt-&lt- endl-
}

Когда вы читаете символы с клавиатуры, то, возможно, вам понадобится читать символы вплоть до и включая определенный символ. Когда такой символ будет прочитан, возможно, вы захотите завершить операцию ввода. Для выполнения подобной операции ваша программа может передать искомый символ вcin.getline. -Например, следующий вызов заставляет функцию —cin.getline -читать строку текста, пока не встретится возврат каретки, или пока не будут прочитаны 64 символа, или пока не встретится буква Я:

cin.getline(string, 64, «Я»)-

Следующая программа UNTIL_Z.CPP используетcin.getline -для чтения строки текста или символов вплоть до появления буквы Я (включая и эту букву):

#include &lt-iostream.h&gt-

void main(void)

{
— — -char string[128]-
— — -cout &lt-&lt- «Введите строку текста и нажмите Enter» &lt-&lt- endl-
— — -cin.getline(string, sizeof(string), —«Я»)-
— — -cout &lt-&lt- «Вы ввели: «&lt-&lt- string &lt-&lt- endl-
}

Откомпилируйте и запустите эту программу. Экспериментируйте с различными строками текста. Некоторые из них начинайте с буквы Я, некоторые заканчивайте буквой Я, а некоторые пусть вообще не содержат букву Я.

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Каждая созданная вами на C++ программа будет, вероятно, использоватьcin —илиcout длявыполнения операций ввода и вывода. Этот урок посвящен некоторым манипуляторам В/В и функциям, которые вы можете использовать с потокамиcincout. -По мере усложнения ваших программ они часто будут сохранять информацию в файлах. Из урока 34 вы узнаете, как в C++ выполнять операции файлового ввода и вывода. Прежде чем приступить к изучению урока 34, убедитесь, что вы освоили следующие основные концепции:

    1. cincout -являются объектами (переменными) классов istream -и —ostream, -которые определены в заголовочном файлеiostream.h. -А если так, они предоставляют функции, которые ваши программы могут вызывать для решения определенных задач.
    2. Функцияcout.width -позволяет вашим программам указать минимальное количество символов, которые будет использовать следующее выходное значение.
    3. Функцияcout. fill -позволяет вашим программам указать символ, которыйcoutбудет использовать для заполнения пустого пространства устанавливаемого с помощьюcout.width -илиsetw.
    4. Манипуляторsetprecision -позволяет вашим программам управлять количеством цифр, выводимых справа от десятичной точки для значений с плавающей точкой.
    5. Функцииcin.getcout.put -позволяют вашим программам вводить или выводить один символ.
    6. Функцияcin.getline -позволяет вашим программам читать строку текста с клавиатуры.

Категория: Обучение C++ | Дата: 29.03.13

Меню раздела
Блок