C++:Why/How Break 语句在这段代码中有效吗?

C++: Why/How a Break Statement Works In This Code?

作为一个完全的初学者,我已经开始使用 C++ 编程语言。为了成为我的 STEM 学位的更好的程序员,并以竞争性编程为目标。我最近开始使用 C++ 中的函数和循环,但遇到一个问题我不确定如何解决。

问题:“编写一个函数来检查一个数是否为质数”

我的做法:

-> 我想自己实现它,所以我不想在其他人使用 return 类型 bool 的函数的地方复制粘贴代码。

-> 这是我的代码 有效的最终版本:

void prime(int k){
    for(int k1=2;k1<k;k++){
        if(k%k1==0){
            cout<<"int is not prime"<<endl;
            break;
        }
        else{
            cout<<"int is prime"<<endl;
            break;
        }

    }
}

->然后我会在 int Main() 中调用它并让用户输入整数等。

-> 上面的代码是由于我的多次试验和错误造成的,我的思考过程如下:1)如果我不包括“break”;声明我的代码导致无限循环 2) 我需要一种方法来阻止我的代码进入无限循环 3) 我记得这个 website 的函数部分中涵盖的主题,我们可以在其中使用它来终止随意循环。这就是为什么我将它合并到我的代码中以生成最终版本

我的问题:

  1. 谁能解释一下怎么破解的;语句在我的代码上下文中工作?我知道它会产生我想要的效果,但我仍然没有直觉知道这将如何完成我的工作。

  2. 许多在线资源只是将 break 语句引用为某事,然后给出示例。无需通过代码机制。就像循环将如何经历其条件然后遇到中断时一样;语句是做什么的?因此,它对我的​​代码有什么帮助?

任何建议都会有所帮助。我第一次遇到它时仍然无法解决这个问题。

在你的例子中,如果 k % k1 没有显示 k1k 的一个因素,则循环在 print 语句之后中断。如果 k % k1 确实表明 k1k 的一个因子,它 也会跳出循环 .

因此,break 语句中的任何一个都会在此处的第一次迭代 中导致循环终止。如果您测试一个数字是否为质数,则它不起作用。

本质上,您不需要此处的任何 break 语句。他们大多是被迫来到这里的。看看下面的做法:

#include <iostream>
#include <cmath>

bool prime(unsigned k){
    if (k != 2) { // Direct check, so to remain similar to the OP's structure of the code 
        unsigned up_to = sqrt(k) + 1; // Calculate the limit up to which to check
        for (unsigned i = 2; i < up_to; ++i) {
            if (k % i == 0) {
                std::cout << "Is not prime" << std::endl;
                return false;
            }
            else std::cout << "Checking..." << std::endl;
        }
    }
    std::cout << "Is prime" << std::endl;
    return true;
}
// Note, we can check just up to the square root of a k

关于 break

行为的注释

它打破了最接近它的循环这一事实 - 对于嵌套循环具有至关重要的性质(所有这些循环:forwhiledo while):

while (/* condition 1 */) // Outer loop
    while (/* condition 2 */) // Inner loop
        if (/* condition 3 */) break;

这里如果条件3满足,break会导致突破Inner loop,但Outer loop仍会继续迭代。

有关更多信息,您可能对 "How to exit nested loops?" 线程感兴趣。它解决了你的第二个问题。

类比...我在上次看的地方找到了...像往常一样!

寻找你的钥匙是你所处的循环......当你找到它们时......你会突破并继续执行另一项任务......比如可能进入你的车......

所以如果你在车里并且知道你的车就在你放钥匙的地方......那么你正处于准备开车离开的过程......但是这个过程需要钥匙......因此你更改 modes/focus 并开始寻找密钥的循环过程...当发现时立即中断该搜索过程并恢复您正在做的事情。

许多人会在您的代码模式中使用 RETURN 指令...代替中断!两者都做同样的事情......但是 RETURN 是更具描述性的英语......并且应该关注他背后的程序员......另外一点点挖掘可能会表明一个人比另一个人更有效率...