-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」という数字があり、正しく動作します。ただし、コードの奥深くでは、「-ldoublefann」によって g++ にリンクされ、ファイルから一部のデータを読み取る fann ライブラリを使用しています。このライブラリでは、「,」のみが機能します。

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 に答える