Здавалка
Главная | Обратная связь

Чтение данных встроенных типов



Самая привлекательная черта библиотеки потоков ввода-вывода С++ — чтение и запись данных самых различных типов. Листинг 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; // Длинное целое
10:

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: }
21:

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 Все права принадлежат авторам размещенных материалов.