【发布时间】:2018-05-22 02:41:29
【问题描述】:
我是 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 循环。我注意到一旦执行条件count < n_body不再为真,变量 i、j 和 count 就会增加。在这个特定的点上,n_body 是 18,i 是 3,bytes 是 64,flag_index 是 0。我已经发布了 for 循环最后几次迭代的输出和 print 的输出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循环就会关闭(执行主体和前置增量)?
【问题讨论】:
-
您确定要按位或
|而不是逻辑或||? -
如果
count < 18失败,count必须达到18...不知道为什么你会期望它在 17 结束。 -
你在两个循环中增加
i,例如for (i = 0; i < bytes; i++)...for (count = 0, j = flag_index; count < n_body; i++, ...) -
@Schwern,感谢您的关注。我确实想要一个逻辑 OR,这是我的错误。