c++ - 这个 c++ 素数程序中的运行时错误是什么?
问题描述
我的任务是创建一个输出前 N 个素数的程序。用户输入值 N。这是我当前的程序。它的格式可能看起来很奇怪,但我不知道如何解决。不过,很容易看到正在发生的事情。
#include <iostream>
using namespace std;
int main() {
cout << "How many prime numbers?";
int N;
cin >> N;
if(N=1){
cout << "2";
}
if(N>1){
cout << "2" << "\n";
int i=N-1; //i=prime counters
int j=3; //j=test prime
do {
int k;
for(k=2; k<j;){ //divisibility test
if(j%k!=0 and k!=j-1){ //indivisible, check next divisor
k=k+1;
continue;
}
if(j%k!=0 and k==j-1){ //indivisible and last divisor, display prime
cout << j << "\n";
i=i-1 //removes a prime counter
break;
}
if(j%k==0){ // divisible, break from loop
break;
}
}
j=j+1; //test next prime
} while(i>0); //will not continue printing primes if number has exceeded N
}
return 0;
}
无论如何,程序都会输出“2”。然后,它测试每个数字与除 1 之外的每个数字的可分性。如果它是不可分的并且仍然有除数要通过,它会继续。如果它是不可分的并且没有剩下的除数,则打印它,并带走一个“素数计数器”。如果它是可分的,则循环被打破并继续测试下一个数字。当素数计数器达到 0 时,do while 循环结束,程序完成。
当它输出以下内容时,我遇到了程序问题:
有几个素数?2
我不知道为什么会发生这种情况,因为我将 N 指定为整数并要求用户输入 N。它甚至没有给我输入 N 的机会,它只是自动打印“2”。到底是怎么回事?
解决方案
您的代码中有一些基本错误。您可以在以下位置查看工作版本
http://coliru.stacked-crooked.com/a/3e6ab22ca6e15b00
您遇到的主要错误是
if(N=1){
cout << "2";
}
你打算写
if(N==1){
cout << "2";
}
注意相等检查是 with==
和赋值是 with =
。任何体面的编译器都会告诉你你用错了。例如,您应该在编译器输出上看到警告,例如
main.cpp: In function 'int main()':
main.cpp:8:9: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if(N=1){
~^~
但总的来说,代码有效。
#include <iostream>
using namespace std;
int main() {
int N = 10;
if(N=1){
cout << "2";
}
if(N>1){
cout << "2" << "\n";
int i=N-1; //i=prime counters
int j=3; //j=test prime
do {
int k;
for(k=2; k<j;){ //divisibility test
if(j%k!=0 and k!=j-1){ //indivisible, check next divisor
k=k+1;
continue;
}
if(j%k!=0 and k==j-1){ //indivisible and last divisor, display prime
cout << j << "\n";
i=i-1; //removes a prime counter
break;
}
if(j%k==0){ // divisible, break from loop
break;
}
}
j=j+1; //test next prime
} while(i>0); //will not continue printing primes if number has exceeded N
}
return 0;
}
输出是
2
3
5
7
11
13
17
19
23
29
您可能还想更改代码以删除
using namespace std;
它通常被认为是不好的做法。更多信息在这里
推荐阅读
- git - pythonanywhere 是否允许在免费帐户中安装其他 Git 版本?
- gulp - Gulp v4 不更新浏览器
- javascript - Object.keys() 返回在 Ant Design 表格列渲染中不起作用
- javascript - 如何使用 localstorage 和 Jquery 从多个点击事件中生成一个包含一组存储值的对象键
- python-3.x - TypeError: 'float' 对象不能被解释为 stride_trick.as_strided 中的整数
- unity3d - 如何从 Mixamo 中删除上传的角色
- regex - 使用正则表达式确定这两种情况
- typescript - “”的这种行为是 TypeScript 类型系统错误吗?
- physics-engine - PAL(物理抽象层)仍然是一个可行的实用程序吗?
- docker - GitHub Actions:获取所有作业命令以在 Docker 容器中运行