继续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++;
}
原因是什么?
答案 0 :(得分:1)
在for循环中,当运行继续时,空格将更新,但是while循环则不会
这不是因为continue
的行为不同,而是因为for
和while
循环是不同的。
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
的效果:-)