为什么我不能在for循环中使用x + 1?

时间:2013-08-25 09:45:24

标签: c

我正在处理该代码,我尝试使用x + 1代替++x,结果是无限循环,并在屏幕上打印了零。

这是代码:

#include <stdio.h>
int main(void){
  int x;
  for(x = 0; x <= 100; x + 1) //instead of ++x
    printf("%d\t",x);
  return 0;
}

我想知道这个动作.....为什么编译器没有产生这样的错误,,,,实际发生了什么?!!并且x++被视为x += 1

4 个答案:

答案 0 :(得分:9)

您需要更改x的值,否则您的循环将永远不会终止。如果只有x + 1,则在迭代结束时计算x + 1,但会丢弃其结果值。表达式的结果不存储在任何地方。因此x将保持为零,x <= 100将保持为真,并且您的循环将永远继续。

如果您有以下任何一项:

x = x + 1
x += 1
x++
++x

x本身的值递增。这就是你所需要的。

答案 1 :(得分:6)

虽然for循环的基本结构类似于 -

for(initialization; condition; increment or decrement)

但在其核心部分,“条件”部分仅用于控制循环行为。因此,如果其他两个部分在语法上是正确的,那么编译器不会产生任何错误。

因为x+1是一个有效的C语句,并且x的值没有改变所以它会进入一个无限循环,条件[x <= 100 => 0 <= 100]永远是真的。

同样,x++++x在独立使用时均视为x = x + 1。但是,x++实际上是Post-increment运算符,而++x是Pre-increment运算符。也就是说,使用++x时,x的值将首先递增,然后分配给x。然而,x的当前值将用于x++中的整个语句,然后x将递增并分配新值。请看以下示例 -

    #include<stdio.h>
    void main()
    {
        int x=5;
    /* Post & Pre-Increment used independently */
        x++;
        printf("x : %d", x);

        ++x;
        printf("\nx : %d", x);

    /* Used with printf() statement */
        printf("\nPre-increment of x: %d", ++x);

        printf("\nPost-increment of x: %d", x++);

        printf("\nPost-increment effect on x: %d", x);
    }

输出:

x : 6
x : 7
Pre-increment of x: 8
Post-increment of x: 8
Post-increment effect on x: 9

我希望我的解释让你理解,如果还没有,你可以回复我。

答案 2 :(得分:5)

表达式x + 1应该是for x = x + 1 for for循环,所以正确:

for(x = 0; x <= 100; x + 1) 
                      ^ 
                      doesn't increment x

无限循环!

as:

for(x = 0; x <= 100; x = x + 1) 

for(x = 0; x <= 100; x += 1)  // or simply x++ or ++x

编译器没有产生这样的错误,因为x + 1是一个有效的表达式(但它不是你想要的)。

因此,x += 1x++++x不仅可以向x添加一个,还可以修改x的值。

答案 3 :(得分:1)

你的方法并不完美,因为它肯定会增加x的值,但是当涉及到赋值时,它就失败了。所以你的陈述应该涵盖你的所有要求。

尝试使用

#include <stdio.h>
int main(void){
int x;
for(x = 0; x <= 100; x = x + 1)
    printf("%d\t",x);
return 0;
}

或者您可以使用

#include <stdio.h>
int main(void){
int x;
for(x = 0; x <= 100; x++)
    printf("%d\t",x);
return 0;
}

您可以使用预增量(x++)代替++x(增量后)。 表达式x = x + 1;也可以写为x += 1;,这是嵌入增量的赋值的简写方法。它不仅仅是关于增量,你也可以使用其他运算符。

x -= 3;
x *= 2;