Проблема в том, что C ++ является языком статической типизации. Это означает, что если что-то объявлено как string
, это строка, а если что-то объявлено как double
, это двойное число. В отличие от других языков, таких как JavaScript или PHP, нет способа автоматически преобразовать строку в числовое значение, поскольку преобразование может быть нечетким. Например, если вы попытаетесь преобразовать строку "Hi there!"
в double
, значимого преобразования не будет. Конечно, вы могли бы просто установить double
в 0.0 или NaN, но это почти наверняка маскирует тот факт, что в коде есть проблема.
Чтобы исправить это, не буферизуйте содержимое файла в строку. Вместо этого просто прочитайте непосредственно в double
:
double lol;
openfile >> lol;
Это считывает значение непосредственно как действительное число, и в случае возникновения ошибки метод .fail()
потока возвращает значение true. Например:
double lol;
openfile >> lol;
if (openfile.fail()) {
cout << "Couldn't read a double from the file." << endl;
}