use*_*817 26 c while-loop
我们可以像while(condition);C编程一样放分号吗?如果while(condition);有效,这是什么意思?
Cur*_*urd 53
while (condition);
Run Code Online (Sandbox Code Playgroud)
是相同的
while (condition)
{
}
Run Code Online (Sandbox Code Playgroud)
它可以用于等待循环,例如:
while (!isLightGreen()); // waits until isLightGreen() returns true
go();
Run Code Online (Sandbox Code Playgroud)
And*_*mas 27
这意味着循环体是空的.通常,当条件本身执行某些操作时,将使用此模式.
例如,此循环可以复制条件中的字节:
while ( '\0' != (*pt++ = *ps++))
;
Run Code Online (Sandbox Code Playgroud)
如果你使用的是分号,最好将它放在一个单独的行上,这样看起来就像是一个错误.我个人倾向于使用空括号 - {},有时候注意空块是故意的.
编辑:
在第二条评论中,汤姆安德森注意到单个分号的改进.Google的C++风格指南建议使用此方法或{}.
while ( '\0' != (*pt++ = *ps++))
continue;
Run Code Online (Sandbox Code Playgroud)
Bla*_*iev 10
因为这种情况实际上可能有副作用,所以允许这样的构造.考虑以下:
while (*p && *p++ != ' ');
Run Code Online (Sandbox Code Playgroud)
这会将p指针前进到作为空格的第一个字符.
您甚至可以使用逗号运算符在条件中包含普通语句:
while (do_something(), do_something_else(), i < n);
Run Code Online (Sandbox Code Playgroud)
因为与逗号运算符连接的语句会评估到最右边的语句,所以在这种情况下i < n,上述内容与以下内容相同:
do {
do_something();
do_something_else();
} while (i < n);
Run Code Online (Sandbox Code Playgroud)
Nik*_*chi 10
是的你可以.它只是意味着while循环将保持循环直到condition为false.例如:
#include<stdio.h>
int x = 10;
int func()
{
printf("%d\n", x);
return --x;
}
int main()
{
while(func());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但通常人们不会这样做,因为将逻辑放在循环体中会更有意义.
编辑:
有一些使用的示例,例如,复制以null结尾的字符串:
char dest[256];
char *src = "abcdefghijklmnopqrstuvwxyz";
while(*(dest++) = *(src++));
Run Code Online (Sandbox Code Playgroud)
它将继续评估条件,直到它是错误的.这是一个没有身体的循环.
程序员经常在分号之前添加一个空格,即
while(condition) ;
Run Code Online (Sandbox Code Playgroud)
或空括号:
while(condition) {}
Run Code Online (Sandbox Code Playgroud)
显示空体是有意的,而不仅仅是一个错字.如果你正在阅读一些现有的源代码,并想知道为什么有一个空循环那里你应该阅读接下来的几行,看看分号是否应该真的存在(即接下来的几行看起来像是一个循环与否?).