-1
#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 库,它在 g++ 中通过“-ldoublefann”链接并从文件中读取一些数据,并且在这个库中仅适用于“,”。

4

1 回答 1

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>

于 2012-04-11T13:46:22.430 回答