Qt i problemy z atof()

W projekcie, nad którym aktualnie pracuję, natknęłam się na pewien problem, który spowodował nieprawidłowe działanie dużego fragmentu aplikacji napisanej w C, dołączonej do interfejsu implementowanego w Qt (używam wersji 4.8.0, choć nie ma to zbyt wielkiego znaczenia).

Okazało się że część analityczna programu używała  w wielu miejscach funkcji atof() do przekształcania liczb zapisanych w pliku w postaci ddd.ddd (separatorem była zatem kropka).

#include <cstdlib>
double atof( const char * str );

Funkcja nie odczytywała części dziesiętnych z powodu nieprawidłowego traktowania separatora. Ten poważny błąd, uniemożliwiający działanie całego programu wystarczyło naprawić jedną linijką:

setlocale(LC_NUMERIC,"C");

Linijkę tę należy umieścić w pliku main.cpp, tuż po utworzeniu obiektu typu QApplication. Teraz mój plik wygląda następująco:

#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    setlocale(LC_NUMERIC,"C");

    MainWindow w;
    w.show();

    return a.exec();
}

I – wszystko działa 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *