我目前正在为一篇大学课程编写一个编译器。它需要X语言并将其转换为C. C中的一个输出是:
#include <stdio.h>
int main(void) {
int integer,i;
scanf("%d",&integer);
if(integer <= 5 || integer >= 12)
{
printf("%d",integer);
}
printf("%d",(36 - 1));
printf("\n");
for(integer = -1;integer <= -5;integer += -1)
{
printf("%d",integer);
printf("\n");
}
i = -1;
for(integer = i * i * i;integer <= i * i * (i + i + i + i + i);integer += i * i * i * i * i)
{
printf("%d",integer);
printf("\n");
}
}
在使用gcc v5.4.0编译并为第一个scanf输入12345后运行此代码时,程序似乎不应该进入任何一个for循环。
我感觉它与传递给scanf的指针有关,但我不确定,因为我是C的新手。
答案 0 :(得分:2)
您的代码不会进入循环,因为永远不会满足循环条件。
在第一个循环的情况下:
for(integer = -1;integer <= -5;integer += -1)
integer
以-1开头。然后,检查integer <= -5
。 -1不小于-5,因此条件为假并且未输入循环。
对于第二个循环:
i = -1;
for(integer = i * i * i;integer <= i * i * (i + i + i + i + i);integer += i * i * i * i * i)
integer
以i * i * i
== -1 * -1 * -1
== -1
开头。然后,将其与i * i * (i + i + i + i + i)
== -1 * -1 * ( -1 + -1 + -1 + -1 + -1)
== 1 * ( -5 )
== -5
进行比较。因此,您的比较变为-1 < -5
,这是假的,因此不会输入循环。