2012-04-10 21 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(); 
} 

Meine Standardländereinstellungen sind "es_ES", also "," ist ein Dezimalpunkt. Es ist mein Code. In der Datei "dupa.txt" steht eine Nummer "1.0344" und es funktioniert einwandfrei. Allerdings verwende ich tiefer im Code die fann-Bibliothek, die in g ++ mit "-doublefann" verlinkt ist und einige Daten aus Dateien liest, und in dieser Bibliothek funktioniert nur ",".Es scheint, setlocale() funktioniert nicht in einer verknüpften Bibliothek

+0

Warum würde jemand diese Frage ablehnen? –

Antwort

0

Das Problem wurde von Qt verursacht.

Es gibt einige Code

#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); 
} 

Und dieser Code funktioniert, wie ich erwarten - Es liest Zahlen, die haben, aus der Datei "train.dat" ad druckt Zahlen mit " "".". Der Unterschied zwischen diesen Fällen: Im ersten Fall ist der ähnliche Code irgendwo in der Anwendung, dieser Code ist unabhängig. Qt legt eigene Gebietsschemas fest, also fügt die Lösung eine Zeile hinzu: std::locale::global(std::locale("en_US")); und #include <QtCore>