即使输入最少10个数字,我也没有错误,但我的代码在运行时立即崩溃。我也想知道,如果我有一个类似于我已经问过的另一个问题的问题,我应该怎么做,但另一个新问题呢?
#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
int primer(int max);
int main()
{
primer(5);
system("pause");
return 0;
}
int primer(int max){
vector<int> a;
a[1]=2;
for (int i=2;i<=max;i++){
bool prime=true;
for (int ii=0;ii<a.size();ii++) {
if (i/a[ii]==floor(i/a[ii])) {
prime=false;
}
}
if (prime==true) {
a.push_back(i);
}
}
for (int iii=0;iii<=a.size();iii++) {
cout << a[iii] << endl;
}
}
我没有错误,但编译后的代码立即崩溃。 我把它改成了
#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
int primer(int max);
int main()
{
primer(5);
system("pause");
return 0;
}
int primer(int max){
vector<int> a;
a.push_back(2);
for (double i=2;i<=max;i++){
bool prime=true;
for (int ii=0;ii<a.size();ii++) {
if (i/a[ii]==floor(i/a[ii])) {
prime=false;
}
}
if (prime) {
a.push_back(i);
}
}
for (int iii=0;iii<=a.size();iii++) {
cout << a[iii] << endl;
return a.size();
}
}
我解决了你所有的问题。它仍然没有返回任何错误,仍然崩溃。
答案 0 :(得分:5)
是什么让你认为你能做到这一点?
vector<int> a;
a[1]=2;
答案 1 :(得分:1)
vector<int> a;
a[1]=2;
在为此预留空间之前,您无法访问a[1]
。您应该使用a.push_back(2)
将{2}添加到a
的末尾。
您已声明primer
返回int
,但它没有返回任何内容。使其成为void
或返回素数。
i/a[ii]==floor(i/a[ii])
不会按预期执行。 i/a[ii]
执行整数除法。您应该在分割之前将i
强制转换为double
。
if (prime==true)
可以更改为if (prime)
,无需将布尔值与true
进行比较。
请改善您的编码风格。使用适当的缩进和更常用的变量名称:i
,j
,k
而不是i
,ii
,iii
。
答案 2 :(得分:1)
这是另一个错误:
for (int iii=0;iii<=a.size();iii++) {
cout << a[iii] << endl;
return a.size();
}
我的理解是,您只能return
来自一个函数main
。由于return
语句,执行不会在此处循环。
您真的想在return
循环中找到for
语句吗?