c语言 - 似乎 setlocale() 在链接库中不起作用


#include <qapplication.h>
#include <qmainwindow.h>
#include "mainwindow.hpp"
#include "../RegisterOfErrors.hpp"
#include <clocale>
extern std::string* Error::DescriptionOfErrors;
int main (int argc, char *argv[])
{
   std::locale::global(std::locale("en_US"));
   setlocale(LC_ALL, "en_US");
   FILE *conf = fopen("dupa.txt", "r");
   float dupa;
   fscanf(conf, "%f", &dupa);
   printf("%fn", dupa);
   Error::setDescriptionOfErrors();
   QApplication app(argc, argv);
   MainWindow window;
   window.show();
   return app.exec();
}

我的默认区域设置是"es_ES",所以","是小数点。这是我的代码。在文件"dupa.txt"中是一个数字"1.0344",它可以正常工作。但是,在代码的更深处,我使用的是 fann 库,该库在 g++ 中通过"-ldoublefann"链接并从文件中读取一些数据,并且在此库中仅工作","。

该问题是由 Qt 引起的。

有一些代码

#include "doublefann.h"
#include "fann_cpp.h"
#include <clocale>
int main() {
    setlocale(LC_ALL, "en_US");
    const int max_neurons = 20;
    const int neurons_between_reports = 1;
    const double desired_error = 0.0001;    
    FANN::neural_net* repetition_ann;
    repetition_ann = new FANN::neural_net();
    repetition_ann->create_shortcut(2, 2, 1);
    repetition_ann->cascadetrain_on_file("train.dat", max_neurons, neurons_between_reports, desired_error);
}

这段代码按我预期工作 - 它从文件"train.dat"中读取带有"."的数字,广告打印带有"."的数字。这些情况之间的区别:在第一种情况下,类似的代码在qtapplication的某个地方,这个代码是独立的。Qt设置自己的语言环境,因此解决方案是添加一行:std::locale::global(std::locale("en_US"));#include <QtCore>

最新更新