Dunque ho risistemato un po' il codice, tra quello che avevo e quello che c0der mi ha aiutato a scrivere, ed alla fine ho elaborato questo:
codice:
#include <iostream>
#include <stdlib.h>
using namespace std;
void chiedi_primo()
{
long long p;
char c;
float f;
int divisori = 0;
cout << "Digita un numero intero positivo: \n\n", cin >> p;
if (p == c || p == f || p == 0)
cout << " Cos'e' questo ciarpame!?\n\n", exit(0);
else if (p < 0)
cout << " Non fare il furbetto, voglio un numero positivo!\n\n";
else if (p < 2)
cout << " Questo non e' un numero primo.\n\n";
else if (p == 2)
cout << p << " Questo e' il numero primo piu' piccolo e piu' bello!\n\n";
else {
for (int q = 2; q <= p/2; q++)
if (p%q == 0) {
cout << p << " = " << q << " * " << p / q << endl;
divisori++;
}
if (divisori > 0)
cout <<"\nQuesto dimostra che "<< p <<" non e un numero primo.\n\n";
else
cout <<"\n"<< p <<" e' un numero primo!\n\n";
}
}
int main()
{
while (true)
chiedi_primo();
return 0;
}
Va tutto benissimo, ossia il programma restituisce tutti i divisori qualora il numero inserito non sia primo, et vicem.
Se inserisco "la vispa teresa" o "asd" o "i" o "0.00034" il programma rifugge dallo schifo inserito, uscendo.
Ma se inserisco "11d", il programma mischia le cose: stdout mi dice:
"11d è un numero primo.
Cos'è questo ciarpame?"
Ossia mischia i risultati dell'inserimento di "11" con "d"..
Non so come risolverlo..
Aiutatemi per favore!
P.s. domanda: l'inserimento di exit(0) è corretto? O ci sono altri modi per effettuare quell'azione?
grazie!!