Как вы читаете в двойном файле на С++?
Я знаю, что для целых чисел вы можете использовать getline(), а затем atoi, но я не нахожу массив для двойной функции. Что доступно для чтения в двойниках или преобразования массива символов в двойное?
Как вы читаете в двойном файле на С++?
Я знаю, что для целых чисел вы можете использовать getline(), а затем atoi, но я не нахожу массив для двойной функции. Что доступно для чтения в двойниках или преобразования массива символов в двойное?
Вы можете использовать извлечение потока:
std::ifstream ifs(...);
double d;
ifs >> d;
Эта работа предусматривала, что кроме пробелов, следующие данные в потоке должны быть двойными в текстовом представлении.
После извлечения вы можете проверить состояние потока на наличие ошибок:
ifs >> d;
if (!ifs)
{
// the double extraction failed
}
.fail()
, который немного отличается от .good()
, который эквивалентен .rdstate() == 0
). Используйте if (!(ifs >> d)) {/*failed*/}
или ifs >> d; if (!ifs) {/*..*/}
или (как правило, более полезно) if (ifs >> d) {/*use d*/} else {/*failed*/}
.
- person ; 11.04.2010
!stream
аналогично stream.fail()
, использование bool(stream)
аналогично !stream.fail()
.)
- person ; 11.04.2010
Не рассматривайте возможность использования atof() или любой из функций ato.., так как они не позволяют диагностировать ошибки. Взгляните на strtod и strtol. Или используйте операторы извлечения потока.
Мне интересно, нужно ли быть осторожным с настройками локали (например, локаль может использовать запятую вместо точки для разделения десятичной части) или всегда ли строковые потоки по умолчанию используют некоторую стандартную нотацию «C локаль»?
Вы можете использовать istringstream. Например, вот toDouble и toInt:
double toDouble(string s) {
double r = 0;
istringstream ss(s);
ss >> r;
return r;
}
int toInt(string s) {
int r=0;
istringstream ss(s);
ss >> r;
return r;
}
getline()
, а затемatoi()
, вы можете заменитьatoi()
наatof()
, и все будет в порядке. Но метод @R Samuel Klatchko должен хорошо работать как для двойных, так и для целых чисел. - person Chris Lutz   schedule 11.04.2010