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 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.