PDA

Visualizza la versione completa : [C++] Problema da neofita su controllo dati inseriti


colde
11-10-2005, 17:24
Ciao a tutti,
sto facendo un programmino stupidissimo dove l'utente inserisce due numeri e successivamente viene visualizzato quello maggiore e minore.
Fino a qui niente di chè, il problema sorge quando voglio fare un controllo sul dato immesso. Se io inserisco ad esempio un carattere come primo numero, il programma si comporta in maniera strana:
salta l'inserimento del secondo numero e mi da direttamente il risultato interpretando il carattere con il suo valore numerico corrispondente (o almeno credo).

Ora, vorrei fare un controllo sul dato immesso, sia per il primo numero che per il secondo e finchè non viene inserito correttamente il valore richiesto, deve ripetere l'inserimento del numero corrispondente (il primo o il secondo).

Ho provato ad inserire un if dopo i vari inserimenti ma vengono ignorati. Come posso fare sta cosa? Ho pensato che si debba richiamare una funzione che faccia il controllo ma non ne sono sicuro e non la so fare.

Sto correndo troppo? Potete darmi una mano?

Questo è il codice che uso:



int main()
{
int num1, num2;

cout << "Segui le indicazioni proposte e vedrai che poi succede qualcosa.\n\n";
cout << "Inserisci il primo numero intero: ";
cin >> num1;
cout << "Inserisci il secondo numero intero: ";
cin >> num2;

if(num1 == num2) cout << "Hai inserito due numeri uguali";
if(num1 < num2){
cout << "Il numero maggiore e' " << num2 << " e quello minore e' " << num1;
}else{
cout << "Il numero maggiore e' " << num1 << " e quello minore e' " << num2;
}
cout << "\nGrazie per aver fatto sta cretinata!\n\n";
system("PAUSE");
return 0;
}



Grazie

colde
11-10-2005, 18:32
20 visite e neanche una risposta? :oVVoVe:
Topic troppo stupido? :fagiano:

infinitejustice
11-10-2005, 19:22
potresti fare un do while con le funzioni di libreria del C (isalpha, ...) sui dati immessi

colde
11-10-2005, 20:18
isalpha cosa farebbe? Immagino sia un'istruzione, giusto?
Ma se ad esempio volessi creare una funzione che controlli i dati inseriti dall'utente in modo da poterla riutilizzare più volte nello stesso programma, come dovrei fare? Non ti chiedo di mostrarmi il codice corretto, mi basta solo un esempio, giusto per capire il concetto.

Grazie

colde
12-10-2005, 14:02
OK, ho fatto come suggerito:



int main()
{
int num1, num2;

cout << "Segui le indicazioni proposte e vedrai che poi succede qualcosa.\n\n\n";


//ciclo che controlla l'inserimento del dato immesso. Finche il dato non risulta un numero il ciclo si ripete
do {
if(!(num1)){
cout << "Il dato inserito non è in formato numerico.\n\nInserisci nuovamente il primo numero intero: ";
}else{
cout << "Inserisci il primo numero intero: ";
}
cin >> num1;
} while(isdigit(num1));

//ciclo che controlla l'inserimento del dato immesso. Finche il dato non risulta un numero il ciclo si ripete
do {
if(!(num2)){
cout << "Il dato inserito non è in formato numerico.\n\nInserisci nuovamente il secondo numero intero: ";
}else{
cout << "Inserisci il secondo numero intero: ";
}
cin >> num2;
} while(isdigit(num2));

if(num1 == num2) cout << "\n\nHai inserito due numeri uguali";
if(num1 < num2){
cout << "\n\nIl numero maggiore e' " << num2 << " e quello minore e' " << num1;
}else{
cout << "\n\nIl numero maggiore e' " << num1 << " e quello minore e' " << num2;
}
cout << "\n\nGrazie per aver fatto sta cretinata!\n\n";
system("PAUSE");
return 0;
}


Ma non funziona. Se inserisco un carattere il programma mi va in loop continuando a visualizzarmi il testo per inserire il numero. Perchè? Concettualmente mi sembra corretto il codice. :master:

colde
12-10-2005, 16:12
Giusto per completare il post, sono riuscito a farlo andare, non mi è assolutamente chiaro il motivo ma funziona.

Questo il codice finale:



int main()
{
char num1, num2;

cout << "Segui le indicazioni proposte e vedrai che poi succede qualcosa.\n\n\n";


//ciclo che controlla l'inserimento del dato immesso. Finche il dato non risulta un numero il ciclo si ripete
do {
if(num1){
cout << "Il dato inserito non e' in formato numerico.\n\nInserisci nuovamente il primo numero intero: ";
}else{
cout << "Inserisci il primo numero intero: ";
}
cin >> num1;
} while(isalpha(num1));

//ciclo che controlla l'inserimento del dato immesso. Finche il dato non risulta un numero il ciclo si ripete
do {
if(num2){
cout << "Il dato inserito non e' in formato numerico.\n\nInserisci nuovamente il secondo numero intero: ";
}else{
cout << "Inserisci il secondo numero intero: ";
}
cin >> num2;
} while(isalpha(num2));

if(num1 == num2) {
cout << "\n\nHai inserito due numeri uguali";
}else if(num1 < num2){
cout << "\n\nIl numero maggiore e' " << num2 << " e quello minore e' " << num1;
}else if(num1 > num2){
cout << "\n\nIl numero maggiore e' " << num1 << " e quello minore e' " << num2;
}
cout << "\n\nGrazie per aver fatto sta cretinata!\n\n";
system("PAUSE");
return 0;
}


Più che altro non capisco perchè assegnando le variabili come char e utilizzando isalpha riesce a capire se è stato inserito un numero o un carattere. Le variabili dovrebbero essere impostate come interi invece che caratteri, visto che bisogna inserire un numero. Anche gli if iniziali non li ho capiti, dovrebbero essere invertiti i testi. Dubito che qualcuno mi darà delucidazioni quindi chiudo semplicemente qui la discussione. Magari più avanti riuscirò a capire da solo.

Grazie a colui che mi ha instradato nella direzione giusta.

Loading