为什么for循环和while循环的continue不同?

时间:2018-08-17 08:12:29

标签: c++

继续for循环和while循环之间的区别: 在for循环中,如果语句运行到spaces,则continue将更新:

int spaces;
for(int i = 0;line[i] != '\0';i++){
    cout << line[i] ;
    if(line[i] == '.')
        break;
    if(line[i] == ' ')
        continue;
    spaces++;
}

但是在while循环中,spaces不会更新:

int spaces;
while(line[i]!=='\0'){
    i++;
    cout << line[i] ;
    if(line[i] == '.')
        break;
    if(line[i] == ' ')
        continue;
    spaces++;
}

原因是什么?

2 个答案:

答案 0 :(得分:1)

  

在for循环中,当运行继续时,空格将更新,但是while循环则不会

这不是因为continue的行为不同,而是因为forwhile循环是不同的。

for循环总是在每次穿过身体之后并在评估条件之前执行 iteration_expression 。也就是说,它仍在continue之后进行评估。

在其他新闻中,您正在分配而不是在if语句中进行测试:

if (line[i] = ' ')   // changes line[i] to space
if (line[i] == ' ')  // compares line[i] to space

您的while循环是错误的,因为它根本不会更新i

答案 1 :(得分:0)

Continue在两种情况下的工作原理完全相同。 只需将continue视为代码块末尾的goto。 例如。进行以下两个循环:

for (auto i=0;i<100;++i)
   {
   if (i==50) continue;
   std::cout << i;
   }
auto j=100;
while (--j!=0)
   {
   if (j==50) continue;
   std::cout << j;
   }

如果在代码块的末尾将continue替换为goto,我们将得到:

for (auto i=0;i<100;++i)
   {
   if (i==50) goto endofforloop;
   std::cout << i;
   endofforloop:
   }
auto j=100;
while (--j!=0)
   {
   if (j==50) endofwhileloop;
   std::cout << j;
   endofwhileloop:
   }

因此,continue的行为在两种情况下都是完全相同的。

免责声明:我不提倡使用goto,这只是为了解释continue的效果:-)