Бесконечный цикл (делать - пока)

for(int m=0;m<=3;m++){
    for(int n=0;n<=3;n++){
        if(n>0){
            int c =n,t=1;
            do{
                t = up_key_no0(&puzz[c][m]);
                c--;
            }while(t==1||c>=0);
        }
    }
}
int up_key_no0(int *puzy){
    int *puzx = puzy -4;
    int down = *puzy;
    int up = *puzx;
    if(((down==up)||(up==0))&&down!=0){
        *puzx += *puzy;
        *puzy=0;
        return 1;
    }
    else{
        return 0;
    }
}

Следующий фрагмент кода неверен? если да то ответь. Весь код не подходит, но головоломка представляет собой двумерный массив 4X4.


person Adit Jain    schedule 08.07.2015    source источник
comment
Что ваш код вообще пытается сделать, прежде чем мы просто ответим Да или Нет?   -  person entropic    schedule 08.07.2015
comment
Я не могу не сосредоточиться на puzy.   -  person 500 - Internal Server Error    schedule 08.07.2015
comment
Не могли бы вы отметить, какой язык вы используете? Не могли бы вы также указать, что должен делать ваш код и какие симптомы вы видите?   -  person phuzi    schedule 08.07.2015
comment
@ 500-InternalServerError C, пузи! Я бы хотел С#...   -  person Thorsten Dittmar    schedule 08.07.2015


Ответы (2)


Ваш цикл do-while может выйти из диапазона таблицы к отрицательным индексам, когда t равно 1, а c равно 0. Поэтому, возможно, вам следует изменить условие на (t == 1 && c >= 0) (и вместо or).

person kipu44    schedule 08.07.2015

Я не знаю, что это за язык, но если это похоже на Java, "для" должно быть таким:

for (var i=0;i<=3;i++) {

}

Ваше время может быть неправильным. Это "==" в то время как должно быть "=".

while(t=1||c>=0) {

}
person Klaider    schedule 08.07.2015