o ввод символа (даже единственного) заканчивается нажатием клавиши <enter>; при вводе символов игнорируются пробельные символы, поэтому последовательность символов «qwe» можно задать разными способами (перемежая пробелами или нажатием <enter>); манипулятор noskipws позволяет не пропускать пробелы (cin >> noskipws >> c1 >> c2 >>c3;); ввод символа реализуется также операторами: ch=cin.get(); cin.get(ch); cin.read(&ch,1); хотя символьные типы могут использоваться в арифметических выражениях, ввести целое значение в символьную переменную нельзя (даже при наборе цифры, в символьную переменную всегда попадает код цифровой клавиши);
o при вводе строки в буфер входного потока заносится вся введенная информация с завершающими символами (\r\n), формируемыми при нажатии клавиши <enter>; при каждой операции «извлечение» – до ближайшего пробела; вместо «пробела» заносится ‘\0’;
o для ввода строк с пробелами в символьный массив используются методы cin.get(), cin.getline(); метод cin.ignore() извлекает символы из потока, ничего не занося в переменные и имеет два параметра (количество удаляемых символов, по умолчанию – 1, символ-ограничитель, который тоже удаляется из потока, по умолчанию – конец файла);
при выводе:
o целые числа выводятся в десятичной системе счисления; шестнадцатеричная константа 0xFFFF на экране будет показана как десятичное число 65535;
o для дробного числа (независимо от типа float/double) выводится только 6 значащих цифр (например, число 7.123456789 выводится как 7.12346, а число 1234567.15 – как 1.23456е+006;
o указатели по умолчанию выводятся в шестнадцатеричной системе счисления, независимо от типа; исключение составляет указатель на символьную константу: по умолчанию выводится не указатель, а строка символов, на которую он указывает, поэтому для вывода указателя необходимо преобразование типа к типу void * (char *s=”aaaaa\n”; cout << s << “ “ << static_cast<void *>(s) << ‘\n’;);
o значения типа bool выводятся как целые (1–true, 0–false); возможен вывод true и false (вместо 1 и 0) при установке флага форматирования boolalpha (например, cout.setf(ios::boolalpha); или cout.flags(ios::boolalpha); правда, последний способ предварительно сбрасывает все остальные флаги);
o значения перечисляемого типа по умолчанию выводятся как целые;
o символьные переменные по умолчанию выводятся как символы; чтобы вывести символьную переменную как число, необходимо задать явное преобразование типа (char n=-100; cout << int(n) << ‘\n’; одиночный символ можно вывести методом put() (char ch = ‘a’; cout.put(ch);) или методом write() (char ch =’a’; cout.write(&ch, 1);
o при выводе строки из памяти в выходной поток переносятся все символы до ‘\0’; Операция оператор << работает и с символьными массивами и со строками типа string (string s3 = “aaaaa\n”; cout << s3;); вывести строку (кроме переменных типа string) можно и методом write() (char *s1=”bbbbb”; cout.write(s1, strlen(s1));
o при выводе выражений необходимо учитывать приоритет операций; оператор << изначально является операцией сдвига влево и имеет свой приоритет (например, cout << d = f << ‘\n’; интерпретируется как (cout << d) = (f << ‘\n’); и вызовет ошибку трансляции; исправление: cout << (d=f) << ‘\n’;)
Проанализируйте примеры ввода-вывода переменных разных типов:
операторы |
int i; cin >> i; cout <<i <<endl; |
char *s; s=new char[40]; cin >> s; cout<<s <<endl; |
char c, c1, c2; cin >>с >> c1 >> c2; cout<<с <<c1<<c2 <<endl; |
int i; char *s; s=new char[40]; cin >> i >> s; cout << i << “ “<<s << endl; |
ввод результат ввод результат ввод результат ввод результат |
qwert123 0 qwert 123 0 123qwert 123 123 qwert 123 |
qwert123 qwert123 |
1 2 3<enter> 123 1<enter>2<enter>3<enter> 123 1 23 4<enter> 123 |
123qwert<enter> 123 qwert 123 qwert<enter> 123 qwert |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.