2012-04-10 62 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>