Чтение данных встроенных типов
Самая привлекательная черта библиотеки потоков ввода-вывода С++ — чтение и запись данных самых различных типов. Листинг 1.4 демонстрирует чтение данных целых и вещественных типов с помощью операторов библиотеки потоков. Попробуйте ввести ошибки (например, XXX вместо вещественного значения) для того, чтобы увидеть, как программа их обрабатывает. Листинг 1.4. GETVAL.CPP (использование библиотеки потоков ввода-вывода для чтения данных встроенных типов) 1: #include <iostream.h> 2: #include <stdlib.h> 3: 4: void test(void); 5: 6: main() 7: { 8: double fp; // Вещественное значение 9: long k; // Длинное целое 11: cout « "Enter a floating-point value: "; 12: cin » fp; // test проверяет результат вызова cin.good() //— функции-члена, которая возвращает //TRUE, если не было неисправимых ошибок //для указанного потока.
13: test(); 14: cout « "Value entered is: " « fp << "\n"; 15: cout << "Enter an integer value: "; 16: cin » k; 17: test(); 18: cout« "Value entered is: " « k << '\n'; 19: return 0; 20: } 22: void test(void) 23: { 24: if (!cin.good()) { 25: cout << "Error detected"; 26: exit(1); 27: } 28: } Строка 11 запрашивает вещественное значение, читая его оператором потокового ввода в переменную fp типа double в строке 12. Аналогичный оператор ввода в строке 16 читает целое значение. В отличие от стандартного ввода-вывода, который требует точно задавать типы данных в функции scanf() или вызывать функции, которые могут читать и преобразовывать нестандартные типы, потоки ввода-вывода автоматически определяют тип переменных, используемых в операциях ввода-вывода. Поскольку не обязательно точно указывать типы данных, вы не сделаете ошибку в указании типа, как это могло бы быть при использовании стандартного ввода-вывода. В С++ очень сложно ввести в переменную данные неверного типа! Строки 13 и 17 демонстрируют еще одно важное достоинство потоков ввода-вывода. Эти строки вызывают локальную функцию test(), приведенную в строках 22-28. Функция проверяет результат вызова cin.good() — функции-члена, которая возвращает TRUE, если не было неисправимых ошибок для указанного потока. Можно использовать cout.good() точно так же и для выходного потока. В приведенном примере программы, если cin.good() возвращает FALSE, строки 25-26 выводят сообщение и завершают выполнение программы. Вы не должны останавливать программу при обнаружении ошибки. Для сброса состояния ошибки следует использовать оператор cin.clear();
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|