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:
Va tutto benissimo, ossia il programma restituisce tutti i divisori qualora il numero inserito non sia primo, et vicem.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; }
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!!

Rispondi quotando