先说结论:正确且习惯用while(){}
可以没有{},此时于while()后第一个分号前面的语句就是循环体。
可以同时有{}和分号“;” , 也就是说,当有 {} 结尾可不需要分号, 当然你加了不也会出错,但不要while();
while(){} //有 {} 结尾可不需要分号, 当然你加了不也会出错,但不要while();。
但是要注意,如果是do while结构,在while()后面必须有;
do{}while(); //要分号结束
【注意】:在C语言中 ; 分号 是可以看成表示执行语句结束
分析:第一个例子循环体在while的前面,先执行的是循环体,再判断条件。而条件是不能用大括号{}括起来的的,在C语言中每段程序之间都要用分号隔开的,所以就要分号; 第二个列子是先判断条件,再执行循环体,而循环体是用大括号{}包起来的,而在C语言中大括号和分号不能同时在一起,所以就没有分号;就相当于if(){}语句一样。
1、当while在复合语句中没有使用花括号{}时
while()
语句a;
语句b;
语句c;
当while在复合语句中没有使用花括号时 循环体只有语句a,
相当于while()后第一个分号前面的语句就是循环体。
举例子:
int main()
{
int i=0;
int n = 3;//表示从键盘输入的整数
while(i<=n)//n是几下面的循环体就执行几次
printf("%d",i); //打印出来的结果是:全是0
i=i+1; //结论:printf("%d",i)为循环体,无法执行到i=i+1,由于i=0不变,这是一个死循环
}
2、在上述例子基础上,在while(i<=n)后面加分号;
int main()
{
int i=0;
int n = 3;//表示从键盘输入的整数
while(i<=n); //编译可以通过,但是执行时不打印任何信息
printf("%d",i);
i=i+1;
}
//上面分析得到,while()后第一个分号前面的语句就是循环体。本例中,while()后第一个分号前面的语句是空语句,相当于什么也没有执行,所以执行时没打印出信息
3、正确写法while(){}
//while后有{}号
int main()
{
int i=0;
int n = 3;//表示从键盘输入的整数
while(i<=n)//n是几下面的循环体就执行几次
{
printf("%d\n",i); //打印出来的结果是:0123
i=i+1;
}; //有 {} 结尾可不需要分号, 当然你加了不也会出错
}