2012-04-10 60 views
0
#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」鏈接,並從文件中讀取一些數據,而在這個庫中只能使用「,」。看起來setlocale()在鏈接庫中不起作用

+0

爲什麼有人會低估這個問題? – 2012-08-02 09:11:11

回答

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’與廣告印刷品號「‘’。」 那些情況的區別在於:在第一種情況下similiar代碼是某處qtapplication,這個代碼是獨立的。 Qt設置自己的區域設置,所以解決方案是添加一條線:std::locale::global(std::locale("en_US"));#include <QtCore>