Miért nem jó ez program? Lefordul csak a számok beadása után axe leáll mert hibát észlelt.
Csak gyakorolok.
Egy ehhez hasonló kódot már töltöttem fel ide de ez a kérdés teljesen másról szól.
Itt nem a prímszámok ki íratásával van a gondom.
Olyat akarok csinálni,hogy egy függvénynek át adok egy std::arrayt majd a függvényből vissza egy tömböt.
Lefordul még csak warning sincs de nem működik.
Itt a kód:
//main.cpp
#include <iostream>
#include <math.h>
#include <array>
bool* isPrime (std::array<int, 5>::iterator);
int main (void)
{
std::array<int, 5> numberArray;
std::cout << "Give me a number or press zero to quit: ";
std::cin >> numberArray.at(0);
if (numberArray.at(0))
{
for (unsigned short i(1); i < 5; ++i)
{
std::cout << "Give me a number: ";
std::cin >> numberArray.at(i);
}
bool *pp(isPrime(numberArray.begin()));
std::cout << '\n';
for (unsigned short i(0); i < 5; ++i)
if (pp[i])
std::cout << "The injected " << numberArray.at(i) << "is a prime number.\n";
else
std::cout << "The injected " << numberArray.at(i) << "is not a prime number.\n";
delete [] pp;
}
std::cout << "Program exited.";
return 0;
}
bool* isPrime (std::array<int, 5>::iterator it)
{
bool *p(new bool[5]);
unsigned short pointerIndex(0);
while (it != it + 5)
{
if (*it <= 1) p[pointerIndex] = false;
else if (*it == 2) p[pointerIndex] = true;
else if (!(*it % 2)) p[pointerIndex] = false;
else
{
const unsigned short root(static_cast<unsigned short>(sqrt(*it)));
for (unsigned short distance(3); distance <= root; ++distance)
if (!(*it % distance))
p[pointerIndex] = false;
p[pointerIndex] = true;
}
++it;
++pointerIndex;
}
return p;
}
www.pastebin-com/5Mp4ALrH
Ez a jó link:
A pastebin pont com /Gh25XD79
Egyébként seggfault a helyzet.
Ennél a sornál seggfaultozik: else if (!(*it % 2)) p[pointerIndex] = false;
De hogy csináljam,hogy jó legyen?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!