似乎setlocale()在链接库中不起作用

时间:2012-04-10 19:20:20

标签: c locale static-libraries setlocale fann

#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("%f\n", dupa);
   Error::setDescriptionOfErrors();
   QApplication app(argc, argv);
   MainWindow window;
   window.show();
   return app.exec();
}

我的默认语言环境是“es_ES”,所以“,”是小数点。 这是我的代码。在文件“dupa.txt”中是一个数字“1.0344”,它可以正常工作。但是,在代码中我更深入地使用了fann库,它通过“-ldoublefann”以g ++链接并从文件中读取一些数据,并且在这个库中只能工作“,”。

1 个答案:

答案 0 :(得分:0)

问题是由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>