Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 提取包含continue语句的函数_Function_Loops_Break_Continue - Fatal编程技术网

Function 提取包含continue语句的函数

Function 提取包含continue语句的函数,function,loops,break,continue,Function,Loops,Break,Continue,这正是我好奇的地方。 考虑这段代码: int i; int main() { while (i < 100) { // skip 10 numbers if current number is prime if (is_prime(i)) { i += 10; continue; } printf("%d ", i); i++; } } 不

这正是我好奇的地方。
考虑这段代码:

int i;

int main()
{
    while (i < 100) {

        // skip 10 numbers if current number is prime
        if (is_prime(i)) {
            i += 10;
            continue;
        }

        printf("%d ", i);
        i++;
    }
}
不过,这是行不通的,因为显然
continue
语句现在已经在循环之外(可以说,它无法知道要继续什么)。实际上,
中断
也是如此

以下是我想知道的:

  • 我的前提有缺陷吗?换句话说,像这样在循环中提取函数是错误的吗
  • 如果没有,最好的方法是什么?我可以想出两种方法,但如果有的话,我不确定哪种方法是最好的。
    我可以引入一个全局变量,如
    do\u continue
    ,它在函数中设置并在循环中检查(或者是一个成员变量,如果它是面向对象的),但这对我来说似乎是一个糟糕的做法。
    另一种方法是让函数返回一个布尔值,并在循环中检查它。这将导致类似于
    if(skip_ten_if_prime())继续的结果,我也不确定这是不是可取的,因为函数从未打算返回任何内容,并且函数名为
    handle\u foo()
    (或
    handle\u bar()
    )时,检查的内容可能不明显

对于像这样的简单问题,我倾向于做太多的解释,所以如果我在任何地方不清楚,请道歉。

如果素数可以返回布尔值,请跳过函数
。如果
i
为素数,则为True,在另一种情况下为false。然后通过返回的值,您可以决定是否需要执行continue语句

另外,为此目的创建一个全局变量不是一个好主意。考虑将<代码>的引用或指针> i < /COD>变量>代码> SkpPiTythIfPrime函数。 下面是一个如何解决您的问题的示例。 int i

bool skip_ten_if_prime();

int main()
{
    while (i < 100)  {
        if(skip_ten_if_prime()) {
           continue;
        }
        printf("%d ", i);
        i++;
    }
}

bool skip_ten_if_prime() {
    if (is_prime(i)) {
        i += 10;
        return true;
    }
    return false;
}
bool skip_ten_if_prime();
int main()
{
而(i<100){
如果(跳过十个如果素数(){
继续;
}
printf(“%d”,i);
i++;
}
}
bool skip_ten_if_prime(){
if(is_素数(i)){
i+=10;
返回true;
}
返回false;
}

IMO。。。使用另一个函数来检查第一个函数的布尔结果将是上述两个函数中更好的方法。虽然我建议的两种方法中,后者是可取的,但我不这么认为,而且可能没有更好的方法,所以谢谢你。
bool skip_ten_if_prime();

int main()
{
    while (i < 100)  {
        if(skip_ten_if_prime()) {
           continue;
        }
        printf("%d ", i);
        i++;
    }
}

bool skip_ten_if_prime() {
    if (is_prime(i)) {
        i += 10;
        return true;
    }
    return false;
}