|
Программирование >> Программирование на языке c++
определенный в самом языке). Если оператор используется для новых типов данных, то при его доопределении необходимо предусмотреть соответствующие проверки. Рассмотренные выше функции возвращают истинное (ненулевое) или ложное (нулевое) значения в зависимости от состояния потока. Истинное (ненулевое) значение возвращается, если: ios::badbit ios::hardfail == 1 для bad() функции; ios::eofbit == 1 для eof() функции; ios::failbit ios::badbit ios::hardfail == 1 для failQ функции; все биты состояния потока в нуле для good() функции. В заключение заметим, что в классе ios есть две полезные функции (clear и rdstate), которые соответственно позволяют установить в нуль и прочитать состояние потока (см. § 8.7). Рассмотрим примеры. Первый из них показывает, как можно проверить правильность ввода данных из входного потока. #include <iostream.h> #include <stdlib.h> void nnain{void) { int flags; здесь будет храниться состояние потока int integer; в эту переменную будет вводиться целое значение cout enter something\n ; введите какое-то значение cin >> integer; выполнение ввода flags = cin.rdstateO; чтение состояния потока if{flags) проверка наличия ошибки if(flags & ios::badbit) очистка потока { cout badbit\n ; cin.clear(O); } else завершение программы по критической ошибке { cerr << Can not handle that error\n ; abortO; } cout stream is in a good state\n ; не было ошибки cout integer endl; вывод введенного значения В программе читается значение состояния потока. Если это значение отлично от нуля, то произошла какая-то ошибка. Вторая программа выполняет те же действия, но в ней не используется функция rdstate(). #include <iostream.h> #include <stdlib.h> void main(void) { int integer; cout enter something\n ; cin >> integer; if(!cin) проверка наличия ошибки if( cin.badO ) { cout badbit\n ; cin.clear(O); } else { cerr Can not handle that error\n ; abortO; } cout << stream is in a good state\n ; cout integer endl; 8.5. Форматирование Рассмотрим различные операции вывода. При этом всегда используется форматирование, т. е. представление результата на экране дисплея в определенной форме. Различные формы позволяют вывести данные в различных системах счисления, с различной точностью, с использованием разных критериев выравнивания и т. п. Функции, используемые для форматирования, включены в класс ios, который является базовым для классов istream и ostream (см. рис. 8.2). Рассмотрим некоторые из этих функций (все они имеют атрибут public). Функция width(int) позволяет установить минимальную ширину поля, используемую для вывода очередного значения, например: cout. width(10); cout [ 12345 ]; И В. А. Скляров В результате число 12345 будет выведено в поле шириной 10 символов: [ 12345] Функция width оказывает влияние только на первое выводимое значение, поэтому следующие строки: cout. width(IO); cout [ 12345 ] [ 12345 ]; дают такой результат: [ 12345][12345] По умолчанию минимальная ширина задается равной нулю. Это означает, что ширина поля равна действительному числу выводимых элементов. Пробелы можно заполнить символами, если использовать функцию ffll(char). По умолчанию в качестве символа заполнителя задается пробел. Рассмотрим пример: cout. width(IO); cout.fillC-); cout [ 12345 ]; Теперь результат будет представлен в таком виде: [-----12345] Функции flags и setf используются для установки и проверки специальных признаков форматирования. Эти признаки задаются в виде перечисления в классе ios: public: enum { skipws, пропускает пробелы, табуляцию и т. п. left, выравнивание по лево11 границе right, выравнивание по правой границе internal, выравнивание между знаком и значением dec, число в десятичном формате oct, число в восьмеричном формате hex, число в шестнадцатеричном формате showbase, вывод системы счисления showpoint, выводит отсутствующие нули uppercase, использует заглавные буквы при выводе формата (Е и X)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |