for语句没有写表达式1,为什么嵌套循环的时候循环变量还是原定义值?被空出的表达式1代表什么?

void main()
{
int i,x=1;

for(i=0;i<5;i++)
{
    for(;x<5;x++)
    {
        printf("%d\n",x); //结果全为1 
        break;
    }
}

}


void main()
{
int i,x=1;

for(i=0;i<5;i++)
{
    while(x<5)
    {
        printf("%d\n",x);//结果是1,2,3,4, 
        x++; 
        break;
    }
}

}
//我的理解是在for的嵌套循环中都必须要求x=1;(我的疑惑是我空出了表达式1,但没得到我的预期。)
// 在while被嵌套在其中,其过程不必再计算x=1;

您好,第一种情况每次没加一呢就跳出循环了,所以都为一,第二种情况加一了后,再跳出循环,所以为1234。
第一种情况for循环中再加一个x++;就为一二三四了

#include<stdio.h>
int main()
{
int i,x=1;

for(i=0;i<5;i++)

{

for(;x<5;x++)

{

printf("%d\n",x); //结果全为1 
x++;
break;

}

}

}



img

并不是,而是因为你每次进入内部for的时候最后都运行了break,跳出到外部for,所以并没有进行x++这一步

  1. C语言中for循环3个子句其实都是可以省略的,甚至可以写成
    for(;;){
    }
    
    这样来表示无限循环。

不过,如果不是真正的无限循环,对于各个子句的省略,一般要么前面有值的初始化,要么循环体中有对某个标志值的处理和判断然后用break之类的进行退出循环,或者用return返回语句结束处理(它肯定可以退出当前循环)。

但这些不标准的写法中,尤其需要注意对标志量的处理是否正确,比如你第一个在break前面没有及时处理x的值进行变化(x++因为里面的break而没有真正执行)