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

27

разуется к типу целевой переменной (записанной слева от знака равенства). Если при этом длина (т.е. разрядность) целевой переменной больше разрядности результата, то отбрасываются старшие разряды. Если же разрядность результата вычислений меньше длины целевой переменной, то недостающие разряды в целевой переменной дополняются слева нулями. Например, пусть

char a; int x; a = 's'; x = a;

тогда переменная x, которая относится к типу int, после указанных действий получит код строчной буквы 's', который (из таблицы кодов ASCII) равен 115 (десятичное число).

Если же имеет место такая ситуация:

char a; int x;

x = 298; a = x;

то переменная a получит значение 42, соответствующее коду символа '*'. В данном случае разрядность переменной a равна 8 двоичным разрядам, а допускаемый диапазон значений от -128 до +127, т.е. всего 256, а 42 = 298 - 256. Другими словами, при присваивании a = x; была отброшена часть числа, превышающая 256.

Ввод информации с клавиатуры и вывод на экран

При выполнении функций ввода автоматически выполняется переключение дисплея на экран пользователя. Здесь имеется в виду, что пользователь работает в среде языка Visual С++ и видит на экране текст своей программы (окно редактора). Ввод с повторением на экране набираемых символов (эхо) и вывод результатов выполнения программы не могут выполняться в то же окно, в котором размещена программа, поскольку будет искажаться ее текст, поэтому пользователю предоставляется другое окно и выполняется по

28

потребности переключение окон. Пользователь должен ввести с клавиатуры ожидаемую программой информацию. Ввод каждого элемента данных завершается либо нажатием на клавишу ввода (ENTER), либо пробелом или клавишей TAB. Эти три клавиши обобщенно называют «белым пробелом» (на английском языке white space или просто ws), а нажатие на клавишу ввода указывает либо на ввод очередного элемента, либо на окончание ввода группы элементов данных. Выполнение программы будет продолжено автоматически после завершения ввода (будет введено столько элементов, сколько было указано переменных для ввода).

Ввод информации в языке С++ удобно выполнять с помощью ключевых слов cin (для ввода) и cout(для вывода) и перегруженных знаков операций >> (сдвиг вправо для ввода) и << (сдвиг влево для вывода). Например,

cout << “Введите число\n”; cin >> x;

В этом примере в верхней строке на экран выводится подсказка. Символы '\n' обеспечивают перевод курсора на экране на новую строку (для удобства ввода), а вторая строка заносит введенное пользователем с клавиатуры значение в переменную x (после нажатия на клавишу ENTER, а если было через пробел набрано несколько чисел, то только первое число).

При вводе после символов >> можно записать имя переменной любого типа, а при выводе можно записывать строковые и числовые константы, а также арифметические выражения. Арифметическое выражение желательно заключить в круглые скобки, поскольку не все компиляторы языка С++ поддерживают отсутствие скобок..

При вводе или выводе нескольких объектов можно с одним ключевым словом cout или cin записывать несколько операций сдвига, например,

cout << “Результат: ” << “x = ”<< x << “, ” << “y = ” << y << endl;

29

Если x был равен 2, а y был равен 3, то в результате выполнения этого оператора будет получен приведенный ниже вывод:

Результат: x = 2, y = 3

Обратите внимание на наличие пробелов при выводе (они были вставлены в строковые константы). Для перехода на новую строку можно использовать вместо символов '\n' константу endl (конец строки).

При выводе часто необходимо форматировать информацию (указывать количество позиций для размещения элемента данных, задавать для вывода систему счисления, выбирать точность представления дробных чисел и т. д.). Для реализации этих команд требуется подключить библиотеку манипуляторов с помощью директивы препроцессора:

#include <iomanip>

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

Манипулятор

Назначение

 

 

setw(n)

Установка количества позиций для вывода

 

 

setprecision (n)

Установка разрядностии чисел

 

 

setbase(base)

Установка основания системы счисления (8,

 

10, 16)

 

 

setiosflags

Установка флагов, управляющих выравнива-

(<flags>)

нием, формой представления чисел и т. д.

 

 

Манипулятор setw(n), устанавливает количество позиций для размещения информации, где n – целое число. Если целая часть числа (или длина строки) превышает заданную длину, то вывод выполняется на требуемую длину. Это манипулятор действует только на элемент данных записанный после него.

Манипулятор setprecision (n) устанавливает количество разрядов

(n) представления числа при выводе. Точность указывает на общее количество цифр при выводе числа. Например, если задать n = 3, то число, состоящее из цифр 142, может быть выведено как 1.42 или

30

14.2. Если число целое, то нули в дробной части не выводятся. Если этот манипулятор не записан, то в дробной части числа выводится шесть цифр.

Манипулятор setbase (base), где base - основание системы счисления, обеспечивает вывод чисел в заданной системе счисления (восьмеричной, десятичной или шестнадцатеричной).

Манипуляторы setprecision (n) и setbase (base) действуют на все далее выводимые элементы данных (пока не будет записан манипулятор с другим значением длины или основания системы счисления).

Манипулятор setiosflags (<flags>) позволяет установить флаги, влияющие на форму вывода информации. Наиболее употребительные флаги приведены в таблице.

Флаг

Назначение

 

 

fixed

Вывод числа с фиксированной точкой

 

 

scientific

Вывод числа в научной форме записи (с по-

 

рядком)

 

 

left, right

Выравнивание влево или вправо

 

 

uppercase

Вывод заглавными буквами

 

 

Флаг fixed обеспечивает вывод числа в форме с десятичной точкой. Количество цифр после точки задается манипулятором setprecision. Если число целое, то нули в дробной части не выводятся. Если манипулятор setw установил длину, в которой число полностью не размещается, то отбрасываются (с округлением цифры в дробной части). Если же целая часть больше длины, заданной манипулятором setw или setprecision, то значение установленной длины вывода игнорируется.

Флаг scientific позволяет выводить числа в научной форме записи (с порядком). Для обозначения 10 используется буква ‘e’ (см. параграф «Константы») Точность представления числа задается манипулятором setprecision. Если число целое, то оно выводится, как дробное с десятичной точкой после первой цифры.

31

Флаги left и right изменяют выравнивание элементов данных. Если выделенное манипулятором setw поле для вывода длиннее элемента данным, то по умолчанию числа выравниваются вправо, а строки текста влево. Данные флаги позволяют изменить направление выравнивания.

Флаг uppercase позволяет выводить цифры, обозначаемые буквами, в шестнадцатеричной системе счисления и букву 'e' для научной формы записи в виде заглавных букв. На вывод текстовой информации этот флаг не действует.

Флаги для ввода/вывода входят в класс ios_base, по умолчанию обычно устанавливается пространство имен std. По этой причине при указании флагов требуется указывать и видимость. Например, для вывода числа типа double с именем x с точностью 4 разряда требуется записать:

cout<<setiosflags(ios_base::scientific)<<setprecision(4)<<x<<endl;

Если x будет иметь значение, например, 324.456589, то на экран будет выведено

3.245e+002

Флаги можно задавать индивидуально, записывая каждый раз манипулятор setiosflags, но можно их задать и в одном таком манипуляторе, соединяя их знаком поразрядной операции ИЛИ ( '|’ ). Например, если в предыдущем примере желательно букву вывести заглавной, а точность убрать, то форма записи может иметь вид:

cout<<setiosflags (ios_base::scientific | ios_base::uppercase)<< x << endl;

На экран в этом случае буде выведено

3.24457E+002

Точность представления в этом случае шесть цифр (и было выполнено округление).

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