Обрабатываем несколько исключительных ситуаций
Если преобразование выполнить не удастся, то возникнет уже знакомая нам исключительная ситуация EConvertError (о чем сказано в описании метода ToDoubleQ), и для ее обработки потребуется организовать try- и catch-блоки.
Закрыть любой файл, открытый в текстовом редакторе, можно с помощью стандартной комбинации клавиш Ctrl+F4.
Дедовский способ
— А как бы программисты, использующие старую версию языка Си, выполнили проверку, того, что введенная информация представляет собой корректную запись числа?
— Они бы сделали это проверенным дедовским способом — так же, как похожие задачи решались десятки лет назад. В классе AnsiString есть метод c_str(), который позволяет обращаться к содержимому переменной типа AnsiString как к простой последовательности символов с нулем в конце, в соответствии с требованиями языка Си, благодаря чему с этим содержимым можно работать с помощью стандартных функций тридцатилетней давности. Среди них есть функция atof(). Ее можно найти, если в разделе Указатель справочной системы C++Builder ввести слово string (строка) и просмотреть список разделов, начинающихся с этого слова. Там можно быстро обнаружить рубрику string to floating-point conversions (преобразование строки в число с плавающей запятой) и сразу попасть на определение atof(). Эта функция в качестве своего значения получает адрес первого символа (физические координаты его расположения в оперативной памяти компьютера) строки AnsiString (такой адрес и возвращается методом c_str()) и преобразовывает строку в число типа double.
Используя эту функцию, преобразование строки теперь можно записать так (не вносите никаких изменений в программу — это только пример):
RoublesNum = atof( Roubles->Text.c_str() );
и калькулятор будет нормально работать.
Но как же отловить ошибку в случае ввода неверного значения? При работе atof() в случае ошибки никаких исключительных ситуаций не-возникает — в языке Си их еще не было. Для контроля за результатом выполнения atof() предусмотрена глобальная переменная еггпо. Только, чтобы ее можно было использовать, потребуется добавить в текст программы командную строку включения соответствующего заголовочного файла errno. h, в котором хранится описание этой переменной.
107