2011-01-09 124 views
2

我们可以使用for循环和while循环来达到同样的目的。 如果我使用而不是while,它们会以什么方式影响我们的代码? if-else和switch-case之间会出现同样的问题?如何决定使用什么?例如 哪一个你更喜欢?何时在while循环中使用for循环?

此代码:

int main() 
{ 
    int n = 10; 

    for(int i=0;i<n;i++) 
    { 
     do_something(); 
    } 
    return 0; 
} 

或者验证码:

int main() 
{ 
    int n=10,i=0; 

    while(i<n) 
    { 
      do_something(); 
      i++; 
    } 
    return 0; 
} 

,如果使用或while循环没有以任何方式影响的代码,然后我可以知道什么是需要做2解决同样的问题?

+1

删除了C标签,因为C中没有'cin`。 – Puppy 2011-01-09 17:57:26

+0

http://stackoverflow.com/questions/2950931/for-vs-while-in-c-programming – Lucas 2011-01-09 18:01:49

+1

我稍微改变了标题, [c]在删除`cin`后标记回来,因为这个问题肯定跨越了整个C/C++程序员基础。 – SiegeX 2011-01-09 18:04:50

回答

10

如果您知道循环应预先运行的迭代次数,我会推荐for构造。虽然循环对于当循环的终止条件发生在某些尚未确定的时间时有好处。

13

使用任何一个使你的代码的意图最清楚。

0

绝不会影响你的程序的工作方式!它更容易理解的问题。

switch(i)  // Once finding your case, you can easily know where the switch ends 
       // and thus the next statement of execution 
{ 
    case 1: break ; 
    case 2: break ; 
    // ..... 
    case 10: break ; 
    default:break ; 
} 

if(i==1) // Here you have the pain of finding where the last else if ends ! 
{} 
else if(i==2) 
{} 
// ... 
else if(i==10) 
{} 

然而,这是一个品味问题。我更喜欢switch

+0

if-else和switch case – Atul 2011-01-09 17:41:46

+0

@Atul每个人都认为这是可读性和易于理解的问题。 – Mahesh 2011-01-09 17:43:30

2

通常,for循环可能是优选的简单的循环中,由于环路的逻辑被包含在一个单一的线路:

for (int i = 0; i < 10; ++i) {...}

然而,有时我们需要更复杂的逻辑或流量控制。 A while循环允许我们实现更复杂的循环。例如,假设我们只希望增加在一定条件下计数器变量:

int i = 0; 
while (i < 10) 
{ 
    if (some_condition) ++i; 
    else if (some_other_condition) { ... } 
    else break; 
} 
1

你不能写while(int i=0, i < n);也就是说,您必须在while循环之前定义i;意味着i存在于内部以及循环外部。

但是,在for循环的情况下,您可以在for循环本身中定义i;所以i不存在于循环外部。这是一个区别。正因为这个差异,我喜欢for超过while。很少用while,当for让事情更烦琐!

1

只需使用使代码可读和逻辑的代码即可。

在某些情况下,编译器(至少gcc)将能够优化比for循环做得更好一点。如果我没有记错,优化只是几个时钟周期,所以它可能永远不会对性能产生任何显着影响。

1

有一些非常微妙的区别..

  • 循环变量(多个),例如范围,与fori具有局部范围,具有while这已到之前定义(这意味着它是可用的之后,当然也可以做到这一点与for以及..)
  • continue,具有for循环,变量将递增/递减,具有while,你必须之前continue

插入操作坦率地说,如果你需要如果你不知道边界,并且没有真正的递增/递减,则while循环更有意义,例如递增/递减,for循环是有意义的。

while(some_stream >> input) 
{ 
    // do stuff... 
} 
4

我试着更喜欢for循环。为什么?因为当我看到一个for循环时,我可以预料所有循环bookeeping都保存在一个语句中。我可以插入breakcontinue语句,而不用担心打断循环的操作。最重要的是,循环的主体集中在你真正想要循环做什么,而不是维护循环本身。如果我看到while,那么在我能够理解循环使用的迭代模式之前,我必须查看并理解整个循环体。

我最终使用while唯一的地方是对于其中的一些常规外的环路的控制那些少数情况下(即FindFirstFileW

这是个人意见的所有问题,但。很多人不喜欢我用for循环做的事情,因为循环语句通常最终会跨越多行。