为什么{} while(条件);在它结束时需要分号但是(条件){}不是吗?

时间:2013-02-20 05:59:05

标签: c++ c while-loop do-while

我始终将;放在while的末尾,或者不将其置于do while循环的末尾。那是什么原因?为什么

int numItemsToProcess = 3;  
while(numItemsToProcess > 0)  
{  
    // process an item  
    numItemsToProcess--;  
} 

最后不需要;,但

do  
{  
    numItemsToProcess --;
} while (numItemsToProcess > 0);  

呢? 也许原因并不太重要。但是当你知道你可以记住把;放在哪里的原因时。

4 个答案:

答案 0 :(得分:11)

除了block语句之外,在所有语句之后加上分号。这就是您将while置于do while之后,而不是while {...}中阻止之后的原因。

您还可以使用它来终止几乎所有声明。我现在能想到的唯一例外是函数体,以及C ++中的namespace体。

答案 1 :(得分:7)

它们是两种不同的循环结构。你只需要记住。

将它们视为单行:

do one_thing while( condition );

do { stuff } while( condition );

while( condition ) one_thing;

while( condition ) { stuff }

这些都是最后需要分号的表达式,除了最后一个,其中大括号在逻辑上表示表达式的结尾(考虑if语句)。

答案 2 :(得分:0)

因为它是一个标准 请参阅The ISO C++ standard第128页 此外
这是因为while语句在do-while循环中是有效的。

int x = 10;
int y = 10;

do 
 while(x > 0)
  x--;
 while(x = y--);

因为你要结束陈述 语句以块(由花括号分隔)结束,
或者用分号。 "这样做"是一个单一的陈述,不能以一个块结束(因为它以"而#34;结束), 所以它需要一个分号,就像任何其他声明一样。

答案 3 :(得分:0)

背后的原因如下

  1. 条件: - 条件具有

    之类的签名
    while (expression) 
       statement
    
  2. while循环根据提供给它的表达式执行。如果表达式为true,则while {}中写入的语句将执行else。您也可以在;之后标记while (expression);,但它只会立即完成while语法,因为;表示结束语句。通常whil循环检查表达式并执行其中的语句列表。

    1. 执行条件: - 同时具有

      之类的签名
      do
          statement
      while (expression);
      
    2. do-while是一个有趣的循环。无论do中的expression是真还是假,while之后的语句都会执行至少一个语句。 do while的流表示do之后的语句将执行一次,然后检查while条件。如果while条件为真,则将再次执行do之后的语句。在;结尾处do ... while (expression);的原因是因为此处while被视为声明,因为它的正文位于其上方。在c ++中,每个语句必须以; 结尾,因此do while;结尾。