在下面的代码中,请查看具有“continue”语句的部分。如果我删除“继续”声明并且我没有放任何东西,它会有什么不同。
int prime_or_not(int x){
int i;
if (x == 1 || x == 2){
return 1;
}else if (x % 2 == 0){
return 0;
}else if (x > 2){
for (i = 3; i < x; i += 2){
if (x % i == 0){
return 0;
break;
}else {
continue;
}
}
return 1;
}else {
return 0;
}
}
答案 0 :(得分:6)
根本没有任何区别。 continue
语句是跳转语句。基本上,它跳回你的循环而不执行它之后的代码。
由于continue
语句最后在循环中执行,因此无效。
答案 1 :(得分:5)
它对您的代码没有任何影响,但请考虑这样的事情:
(伪代码):
for(int i = 10; i > -5; i--) {
if(i == 0)
continue;
printf("%d", 10/i);
}
答案 2 :(得分:3)
'continue'直接跳到'for'或'while'括号的末尾,“}”。在你的情况下,因为在continue关键字之后没有任何内容,所以没有任何区别。
为了说清楚,通常情况下,'继续'和没有声明之间存在很大差异。例如,
for (code-condition){
code-1
code-2
continue;
code-3
code-4
}
执行'continue'行后,它会直接跳到结束“}”,忽略代码-3和代码4。在这里执行的下一段代码是代码条件。
答案 3 :(得分:2)
在你的情况下,没有区别。
然而,如果有任何代码,则continue会立即转到循环的下一次迭代,并跳过后面的任何代码。
考虑一下:
int x;
for(x = 0; x < 100; x++){
if(x == 50){
//do something special
continue;
}
//code here is skipped for 50
//do something different for every other number
}
因此,在某些情况下,continue语句可能很有用,但对于你的代码,它完全没有任何区别(可能取决于编译器,但它只会增加最终可执行文件的大小,添加另一个jmp指令,或者也许不是因为它可以完全解开循环。
答案 4 :(得分:2)
我会简化块
for (i = 3; i < x; i += 2){
if (x % i == 0){
return 0;
break;
}else {
continue;
}
}
到
for (i = 3; i < x; i += 2){
if (x % i == 0){
return 0;
}
}
其他行不会改变代码的行为。
答案 5 :(得分:2)
continue
语句在您的示例中没用。它应该用于将代码执行移动到循环的结尾:
while (is_true)
{
...
if (foo)
continue;
if (bar)
break;
...
/* 'continue' makes code jump to here and continues executing from here */
}
/* 'break' makes code jump to here and continues executing from here */
您可以将continue
视为“评估循环条件并在条件为假时继续循环”,并且您可以将break
视为“退出循环,忽略循环条件”
与do-while
相同:
do
{
...
if (foo)
continue;
if (bar)
break;
...
/* 'continue' moves execution to here */
}
while (is_true);
/* 'break' moves execution to here */