2012-04-10 5 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"이며 제대로 작동합니다. 그러나, 코드에서 더 깊은 나는 g ++에서 "-ldoublefann"으로 링크되고 파일에서 일부 데이터를 읽는 fann 라이브러리를 사용하고 있으며이 라이브러리는 ","에서만 작동합니다.setlocale()이 연결된 라이브러리에서 작동하지 않는 것 같습니다

+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>