LINUX.ORG.RU

IF перестал работать!


0

3
if(gl_game->score < 2000){

    QFile("data/st.txt").remove();
    QFile* file3 = new QFile("data/st.txt");
    file3->open(QIODevice::ReadWrite);

    QTextStream stream2(file3);

    qWarning() << "SCORE = " << gl_game->score;

    StatScore[0].push_back(gl_game->score);
    stream2 << QString("|PER/");
    for(int i=0; i<StatScore[0].size(); i++){
        qWarning() << QString::number(StatScore[0][i]) + '/';
        stream2 << QString::number(StatScore[0][i]) + '/';
    }
}

Смотрим скрин что получается http://piccy.info/view3/5878769/acd0e890a107cfae70e2e9a3568fb1ae/

Если убрать работу с файлом вроде все правильно. Но каким образом функции роботы с файлом обходят if ?

UPD. Добавил вверх такую строку. Вроде помогло.

qWarning() << "SCORE = " << gl_game->score << " END SCORE";
if(gl_game->score <  (long int)2000){

    QFile("data/st.txt").remove();
    QFile* file3 = new QFile("data/st.txt");
    file3->open(QIODevice::ReadWrite);

    QTextStream stream2(file3);

    qWarning() << "SCORE = " << gl_game->score << " END SCORE";

    StatScore[0].push_back(gl_game->score);
    stream2 << QString("|PER/");
    for(int i=0; i<StatScore[0].size(); i++){
        qWarning() << QString::number(StatScore[0][i]) + '/';
        stream2 << QString::number(StatScore[0][i]) + '/';
    }
}


Последнее исправление: knotri (всего исправлений: 1)

Слишком маленькая часть кода приведена, но сделаю предположение. Ты уверен, что gl_game->score выводится правильно? Вот например если вывести сначала число 760, а потом 2296 без переноса строки или проблема, то может показаться, что вывелось число 7602296.

upd: я на этих плюсах не пишу, если этот оператор << добавляет перенос строки, то я точно не прав.

amomymous ★★★
()
Последнее исправление: amomymous (всего исправлений: 1)
Ответ на: комментарий от crowbar

gl_game int;

Там храниться неправильное не обнуленное значение переменной. Я конечно могу это исправить по другому, но сам факт того что кое что проскакивает через if у меня вызывает панику.

knotri
() автор топика
Ответ на: комментарий от knotri

А если кастануть 2000 к соответствующему типу (что там, long int)? Так, чисто ради любопытства.

if(gl_game->score < (long int)2000){

amomymous ★★★
()
Ответ на: комментарий от knotri

а очисти проект и собери снова

anonymous
()

Там храниться неправильное не обнуленное значение переменной

Скорее всего то, что тебе представляется числом явно большим 2000, на самом деле является отрицательным.

geometer ★
()

UPD. Добавил вверх такую строку. Вроде помогло.

qWarning() << "SCORE = " << gl_game->score << " END SCORE";
if(gl_game->score <  (long int)2000){

Это магия. И троянский конь.

Программа многопоточная, доступ к score из разных потоков, нет ни блокировок, ни хотя б каких-нибудь барьеров. То, что добавление ввода-вывода устраняет ошибку, подтверждает эту гипотезу.

fopen ★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.