我正在处理该代码,我尝试使用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
?
答案 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 += 1
,x++
或++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;