-2
我一直賽格斷層。我不知道爲什麼。試圖打印出一個「OK」的聲明每隔幾行給我看的錯誤鋪設,但它打印出來,甚至在第一行前賽格故障。我認爲這是越來越在操作符重載可能卡住,或者是一些函數調用之間,但這無法解釋爲什麼它甚至不打印出一個「OK」的聲明賽格故障:原因不明
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
class isprime{
public:
isprime();
void start(int thing);
bool test(int target);
void check(int x);
void checktwo(int xtwo);
int operator()(int p);
private:
void path(int targ);
vector<int> testing;
int b;
};
int main()
{
int given;
while(cin>>given)
{
isprime Begin;
Begin.start(given);//check input as long as there is input
}
return 0;
}
void isprime::start(int thing)
{
if(test(thing) == 1)
{
cout<<thing<<" is a prime number.";
}
else
{
check(thing);
}
}
isprime::isprime()
{
testing[0] = {2};
b = 0;
}
void isprime::check(int x)//checks if input is prime, and sets up next step if so
{
int s;
if(x == 0 || x == 1 || x == -1 || x == 2 || x == -2)
{
cout<<x<<" is a prime number.";
}
else
{
for(int i = 2; i < x; i++)
{
s = x % i;
if(s == 0)
{
b = 1;
break;
}
}
if(s != 0)
{
cout<<x<<" is a prime number.";
}
path(x);
}
}
bool isprime::test (int target)//see if input is already in list
{
for(int i = 0; i < testing.size(); i++)
{
if(target == testing[i])
{
return 1;
}
}
if(int i = testing.size() && target != testing[i])
{
return 0;//if not in list, must test whether it is prime
}
}
void isprime::path(int targ)
{
int y = testing.back() + 1;
while(y != targ)//find all primes between list end and input
{
checktwo(y);
y++;
}
testing.push_back(targ);//add prime input to vector
int storage = testing.size();//remember size
int z = targ + 1;
while(b = 1)//find the next prime while the target isn't prime
{
checktwo(z);
if(testing.size() != storage)//if the size changed, the next prime has been found
{
break;
}
z++;
}
}
void isprime::checktwo(int xtwo)//modified check function to add prime numbers between the vector end and the input to the vector
{
int s;
if(xtwo == -2 || xtwo == -1 || xtwo == 0 || xtwo == 1 || xtwo == 2)
{
testing.push_back(xtwo);
}
else
{
for(int i = 2; i < xtwo; i++)
{
s = xtwo % i;
if(s == 0)
{
break;
}
}
if(s != 0)
{
testing.push_back(xtwo);
}
}
}
int operator()(int p)
{
test(p);//calls a private member function to expand list of prime numbers (test)
}
您是否嘗試過在調試器中運行呢? –
這甚至不爲我編譯。調試器是你的朋友。 –
1是**不是**素數,雖然它不是你的問題的答案。 – taskinoor