Исключения должны быть зарезервированы для исключительных ситуаций.Хотя вы, конечно, можете злоупотреблять ими таким образом, это паршивая идея - очевидно, вы довольно сильно ожидаете чего-то другого, кроме двойных, поэтому трактовать это как исключение не имеет никакого реального смысла.
Единственный реальный вопрос - это точное обстоятельство, при котором вы хотите, чтобы ввод обрабатывался как строка.Например, если входная строка была чем-то вроде «1.23e2 нечисловые данные», хотите ли вы просто использовать «1.23e2» в качестве числа, или вы хотите рассматривать все это как строку?
В любом случае, вы захотите нам strtod
за конвертацию - разница только в том, как вы реагируете на то, что он возвращает.В частности, strtod
принимает два параметра вместо одного, как atof
.Второй параметр - это указатель на указатель на символ.Предполагая, что вы передаете ненулевой указатель, strtod
установит его так, чтобы он указывал на последний символ входной строки, который он успешно преобразовал.Если он указывает на начало входной строки, ничего не было преобразовано.Если это указывает на конец, все было преобразовано.Если он где-то посередине, часть строки преобразована, а часть нет.
В настоящий момент я собираюсь предположить, что вы хотите получить двойное значение, содержащее любое число, которое может быть преобразовано в началестрока и все, что не может быть преобразовано, рассматривается как строка:
#include <stdlib.h>
#include <stdio.h>
int main() {
char input[] = "12.34 non-numeric data";
char *string;
double value = strtod(input, &string);
printf("Number: %f\tstring: %s\n", value, string);
return 0;
}