Я новичок в C, так что этот вопрос, скорее всего, имеет простое решение, но я его не вижу.Я заметил, что мои результаты не соответствуют ожиданиям, и после нескольких часов отладки я понял, что один из циклов for работает не так, как ожидалось.Вот соответствующая часть моего кода:
for (i = 0; i < bytes; i++)
{
if ((temp_array[i]) == 0xCADE | (temp_array[i]) == 0xDADA)
{
printf("i is %d\n",i );
i += 2;
printf("i is now %d\n",i );
n_body = temp_array[i];
i++;
printf("n_body is %d\n",n_body );
for (count = 0, j = flag_index; count < n_body; i++, j++, count++)
{
machine->memory[j] = temp_array[i];
printf("LETS SEE, i in loop is %d\n",i );
printf("LETS SEE, j in loop is %d\n",j );
printf("LETS SEE, count in loop is %d\n", count);
}
printf("\n");
printf("LETS SEE, i out of loop is %d\n",i );
printf("LETS SEE, j out of loop is %d\n",j );
printf("LETS SEE, count out of loop is %d\n", count);
machine->memory[j+1] = flag;
//printf("flag is %d\n",flag );
printf("machine memory index 18 is %d \n", machine->memory[18]);
}
// else
// {
// continue;
// }
//printf("index is %d\n",i );
}
Виновным является второй (вложенный) цикл for.Я заметил, что переменные i, j и count увеличиваются, если условие выполнения count < n_body
больше не соответствует истине.В данный момент n_body
равно 18, i
равно 3, bytes
равно 64 и flag_index
равно 0. Я опубликовал результаты последних нескольких итераций цикла for и выходные данные из печати.операторы вне цикла for:
LETS SEE, i in loop is 18
LETS SEE, j in loop is 15
LETS SEE, count in loop is 15
LETS SEE, i in loop is 19
LETS SEE, j in loop is 16
LETS SEE, count in loop is 16
LETS SEE, i in loop is 20
LETS SEE, j in loop is 17
LETS SEE, count in loop is 17
LETS SEE, i out of loop is 21
LETS SEE, j out of loop is 18
LETS SEE, count out of loop is 18
Почему они увеличиваются?Я думал, что цикл for завершает работу (как при выполнении тела, так и перед пост-постом), когда условие выполнения больше не выполняется?