这只是我很好奇的事情 考虑一下这段代码:
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++;
}
}
想象一下if
部分更长,我想提取新功能以便于阅读。
我很想做这样的事情:
int i;
void skip_ten_if_prime();
int main()
{
while (i < 100) {
skip_ten_if_prime();
printf("%d ", i);
i++;
}
}
void skip_ten_if_prime() {
if (is_prime(i)) {
i += 10;
continue;
}
}
但是,这不会起作用,因为显然continue
语句现在不在循环中(并且无法知道 继续,可以这么说) 。实际上同样适用于break
。
以下是我想知道的事情:
do_continue
这样的全局变量,它在函数中设置并在循环内部检查(如果这是面向对象的,则是成员变量),但这对我来说似乎是不好的做法。if (skip_ten_if_prime()) continue;
的内容,而且我不确定这是否可取,因为函数永远不会返回任何内容,并且函数名称如handle_foo()
(或{ {1}})检查的内容可能并不明显。答案 0 :(得分:0)
您的函数skip_ten_if_prime
可以返回bool值。如果i
是素数则为真,而在另一种情况下为假。然后通过返回值,您可以决定是否需要执行continue语句。
另外,为此目的创建全局变量并不是一个好主意。请考虑将i
变量的引用或指针传递给skip_ten_if_prime
函数。
以下是如何解决问题的示例。 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;
}