C程序没有进入循环

时间:2017-11-17 18:57:37

标签: c gcc

我目前正在为一篇大学课程编写一个编译器。它需要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的新手。

1 个答案:

答案 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)

integeri * 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,这是假的,因此不会输入循环。