13

我总是在将其放置在循环;的末尾while或不将其放置在do while循环的末尾时遇到问题。那么是什么原因呢?为什么

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

最后不需要;但是

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

做?也许原因不是太重要。但是,当您知道原因时,您可以记住该放在哪里;

4

4 回答 4

15

除了块语句之外,您在所有语句之后都加上分号。这就是你将它放在whilein之后do while,而不是放在块 in 之后的原因while {...}

您还可以使用它来终止几乎所有声明。目前我能想到的唯一例外是函数体和namespaceC++ 中的体。

于 2013-02-20T06:01:30.413 回答
12

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

将它们视为单行:

do one_thing while( condition );

do { stuff } while( condition );

while( condition ) one_thing;

while( condition ) { stuff }

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

于 2013-02-20T06:02:29.667 回答
0

因为这是一个标准。
另请参阅ISO C++ 标准 第 128 页

是因为 while 语句在 do-while 循环中有效。

int x = 10;
int y = 10;

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

因为你要结束陈述。
语句以块(由花括号分隔)
或分号结束。“do this while this”是一条语句,不能以块结尾(因为它以“while”结尾),
所以它需要一个分号,就像任何其他语句一样。

于 2013-02-20T06:07:59.833 回答
0

这背后的原因如下

  1. While 条件:- While 条件具有类似的签名

    while (expression) 
       statement
    

While 循环根据提供给它的表达式执行。如果表达式为真,那么写在 while {} 中的语句将执行 else not。您也可以;在之后标记,while (expression);但它只会while立即完成语法,;表示语句结束。通常whil,e 循环检查表达式并执行其中的语句列表。

  1. Do While 条件:- Do while 有一个签名,如

    do
        statement
    while (expression);
    

do-while是一个有趣的循环。do它的特殊之处在于,无论expressioninwhile是真还是假,后面的语句都会执行至少一个。流程do while表示后面的语句do将执行一次,然后while检查条件。如果while条件为真,do将再次执行以下语句。之所以;在末尾有,do ... while (expression);是因为这里while被当作一个语句,因为它的主体在它之上。在 C++ 中,每个语句都必须以;结尾 所以do while;.

于 2013-02-20T06:16:00.940 回答