use*_*546 74 c loops for-loop while-loop
有三个环在C: ,for
,while
和do-while
.他们之间有什么区别?
例如,似乎几乎所有while
语句都可以被for
语句替换,对吧?那么,使用的优势是什么while
?
Rob*_*ner 160
一个while循环总是首先评估条件.
while (condition) {
//gets executed after condition is checked
}
Run Code Online (Sandbox Code Playgroud)
甲DO/while循环将总是在执行代码do{}
块,然后再评估条件.
do {
//gets executed at least once
} while (condition);
Run Code Online (Sandbox Code Playgroud)
一个for循环允许你启动一个计数器变量,检查条件和方式来增加您的柜台都在一行.
for (int x = 0; x < 100; x++) {
//executed until x >= 100
}
Run Code Online (Sandbox Code Playgroud)
在一天结束时,它们仍然是循环,但它们提供了一些灵活性,如何执行.
以下是使用每种不同类型循环的原因的一个很好的解释,可能有助于清理事物.谢谢clyfe
for
s和while
s 之间的主要区别在于语用学:我们通常for
在有已知的迭代次数while
时使用,并且当迭代次数事先未知时使用构造.该while
VSdo ... while
问题也是语用学,第二次在开始执行指令,之后它的行为就像简单的一段时间.
For循环特别好,因为它们简洁.为了这个for循环
for (int x = 0; x < 100; x++) {
//executed until x >= 100
}
Run Code Online (Sandbox Code Playgroud)
要编写为while循环,您必须执行以下操作.
int count = 0;
while (count < 100) {
//do stuff
count++;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,有更多的东西要跟上,并且count++;
可能会在逻辑中丢失.这可能最终会变得麻烦,具体取决于count
增加的位置,以及它是否应该在循环逻辑之前或之后递增.使用for
循环,您的计数器变量总是在循环的下一次迭代之前递增,这为您的代码增加了一些均匀性.
为了完整起见,在这里谈论break
和continue
语句可能是有意义的,它们在进行循环处理时会派上用场.
break将立即终止当前循环,不再执行迭代.
//will only run "do stuff" twice
for (int x = 0; x < 100; x++) {
if (x == 2) {
break;
}
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
continue将终止当前迭代并继续下一个迭代.
//will run "do stuff" until x >= 100 except for when x = 2
for (int x = 0; x < 100; x++) {
if (x == 2) {
continue;
}
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
请注意,在for循环中,'continue'计算'for(part1; part2; part3)'的'part3'表达式; 相反,在while循环中,它只是跳转以重新评估循环条件.
小智 15
如果对速度和性能存在强烈关注,最好的方法是验证编译器在汇编级别生成的代码.
例如,以下代码显示"do-while"更快一些.这是因为"do-while"循环不使用"jmp"指令.
顺便说一句,在这个具体的例子中,最坏的情况是由"for"循环给出的.:))
int main(int argc, char* argv[])
{
int i;
char x[100];
// "FOR" LOOP:
for (i=0; i<100; i++ )
{
x[i] = 0;
}
// "WHILE" LOOP:
i = 0;
while (i<100 )
{
x[i++] = 0;
}
// "DO-WHILE" LOOP:
i = 0;
do
{
x[i++] = 0;
}
while (i<100);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
//"FOR"循环:
010013C8 mov dword ptr [ebp-0Ch],0
010013CF jmp wmain+3Ah (10013DAh)
for (i=0; i<100; i++ )
{
x[i] = 0;
010013D1 mov eax,dword ptr [ebp-0Ch] <<< UPDATE i
010013D4 add eax,1
010013D7 mov dword ptr [ebp-0Ch],eax
010013DA cmp dword ptr [ebp-0Ch],64h <<< TEST
010013DE jge wmain+4Ah (10013EAh) <<< COND JUMP
010013E0 mov eax,dword ptr [ebp-0Ch] <<< DO THE JOB..
010013E3 mov byte ptr [ebp+eax-78h],0
010013E8 jmp wmain+31h (10013D1h) <<< UNCOND JUMP
}
Run Code Online (Sandbox Code Playgroud)
//"WHILE"循环:
i = 0;
010013EA mov dword ptr [ebp-0Ch],0
while (i<100 )
{
x[i++] = 0;
010013F1 cmp dword ptr [ebp-0Ch],64h <<< TEST
010013F5 jge wmain+6Ah (100140Ah) <<< COND JUMP
010013F7 mov eax,dword ptr [ebp-0Ch] <<< DO THE JOB..
010013FA mov byte ptr [ebp+eax-78h],0
010013FF mov ecx,dword ptr [ebp-0Ch] <<< UPDATE i
01001402 add ecx,1
01001405 mov dword ptr [ebp-0Ch],ecx
01001408 jmp wmain+51h (10013F1h) <<< UNCOND JUMP
}
Run Code Online (Sandbox Code Playgroud)
//"DO-WHILE"循环:
i = 0;
. 0100140A mov dword ptr [ebp-0Ch],0
do
{
x[i++] = 0;
01001411 mov eax,dword ptr [ebp-0Ch] <<< DO THE JOB..
01001414 mov byte ptr [ebp+eax-78h],0
01001419 mov ecx,dword ptr [ebp-0Ch] <<< UPDATE i
0100141C add ecx,1
0100141F mov dword ptr [ebp-0Ch],ecx
01001422 cmp dword ptr [ebp-0Ch],64h <<< TEST
01001426 jl wmain+71h (1001411h) <<< COND JUMP
}
while (i<100);
Run Code Online (Sandbox Code Playgroud)
Mic*_*zek 10
它们都是可以互换的; 你可以选择一种类型并且永远使用它,但通常一种方法对于给定的任务更方便.这就像是说"为什么要切换,你可以只使用一堆if语句" - 是的,但是如果它是检查一组变量的常见模式,那么如果有一个语言特征,它会更方便,更容易阅读要做到这一点
如果您希望在条件为真时执行循环,而不是在一定次数的迭代中执行循环,则其他人更容易理解:
while (cond_true)
Run Code Online (Sandbox Code Playgroud)
比这样的东西:
for (; cond_true ; )
Run Code Online (Sandbox Code Playgroud)
请记住,for
循环本质上是一个奇特的while
循环.他们是一回事.
while <some condition is true> {
// do some stuff
// possibly do something to change the condition
}
for ( some var, <some condition is true>; increment var ) {
}
Run Code Online (Sandbox Code Playgroud)
for循环的优点是难以意外地进行无限循环.或者更确切地说,当你做一个时更明显,因为你通常把loop var放在初始语句中.
一个while
循环更加清晰,当你没有做一个标准的递增模式.例如:
int x = 1;
while( x != 10 ) {
if ( some condition )
x = 10;
else
x += 5;
}
Run Code Online (Sandbox Code Playgroud)