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 的函数部分中涵盖的主题,我们可以在其中使用它来终止随意循环。这就是为什么我将它合并到我的代码中以生成最终版本
我的问题:
谁能解释一下怎么破解的;语句在我的代码上下文中工作?我知道它会产生我想要的效果,但我仍然没有直觉知道这将如何完成我的工作。
许多在线资源只是将 break 语句引用为某事,然后给出示例。无需通过代码机制。就像循环将如何经历其条件然后遇到中断时一样;语句是做什么的?因此,它对我的代码有什么帮助?
任何建议都会有所帮助。我第一次遇到它时仍然无法解决这个问题。
在你的例子中,如果 k % k1
没有显示 k1
是 k
的一个因素,则循环在 print 语句之后中断。如果 k % k1
确实表明 k1
是 k
的一个因子,它 也会跳出循环 .
因此,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
行为的注释
它打破了最接近它的循环这一事实 - 对于嵌套循环具有至关重要的性质(所有这些循环:for
、while
和 do 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 是更具描述性的英语......并且应该关注他背后的程序员......另外一点点挖掘可能会表明一个人比另一个人更有效率...
作为一个完全的初学者,我已经开始使用 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 的函数部分中涵盖的主题,我们可以在其中使用它来终止随意循环。这就是为什么我将它合并到我的代码中以生成最终版本
我的问题:
谁能解释一下怎么破解的;语句在我的代码上下文中工作?我知道它会产生我想要的效果,但我仍然没有直觉知道这将如何完成我的工作。
许多在线资源只是将 break 语句引用为某事,然后给出示例。无需通过代码机制。就像循环将如何经历其条件然后遇到中断时一样;语句是做什么的?因此,它对我的代码有什么帮助?
任何建议都会有所帮助。我第一次遇到它时仍然无法解决这个问题。
在你的例子中,如果 k % k1
没有显示 k1
是 k
的一个因素,则循环在 print 语句之后中断。如果 k % k1
确实表明 k1
是 k
的一个因子,它 也会跳出循环 .
因此,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
行为的注释
它打破了最接近它的循环这一事实 - 对于嵌套循环具有至关重要的性质(所有这些循环:for
、while
和 do 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 是更具描述性的英语......并且应该关注他背后的程序员......另外一点点挖掘可能会表明一个人比另一个人更有效率...