Использую inih для парсинга ini файла. Обнаружилось то, что функция INIReader::GetReal(...) возвращает только целую часть вещественного числа. В комментариях написан пример значений переменных при отладке.
double INIReader::GetReal(const string& section, const string& name, double default_value) const
{
string valstr = Get(section, name, ""); // "1.033"
const char* value = valstr.c_str(); // "1.033"
char* end; // ".033"
double n = std::strtod(value, &end); // 1
return end > value ? n : default_value;
}
github code function
Компилятор:
gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
Функция strtod
использует системно-зависимое значение символа разделителя дробной и целой части (decimal separator). И если в системе текущим разделителем является запятая (что характерно для русской локали), функция не сможет правильно распарсить строку, в которой в качестве разделителя использовалась точка. Именно это и происходят в вашем случае.
В качестве решения проблемы можно посоветовать использовать функцию strtod_l
(_strtod_l
для Windows) которая принимает третьим параметром локаль с правильным (ожидаемым) разделителем или можно взять готовую обёртку strtod
(тут или тут) которая парсит вещественные числа с предположением, что разделителем является точка, вне зависимости от значения локали.
есть четыре поля, два любых заполняет пользователь, слушатель наблюдает за заполнением полей, два считаются на их основе по команде слушателяВопрос...
При проходе по этой части кода возникает ошибкаВсё хорошо считывается при проходе первого фрагмента, дальше же возникает ошибка, возможно...