PDA

Visualizza la versione completa : Far ripetere una funzione in cpp, ottenendo un diverso Return


Bisneff
08-04-2011, 11:31
Salve a tutti!

Sto cercando di scrivere qualche ciofeca in c++, tanto per allenarmi un po' e, perchè no, imparare qualcosa...

Ieri stavo dandomi ai programmini più scemi, tipo calcola il numero più alto o cose così... Allora penso di inserire un controllo che impedisca al calcolatore di stampare che "2" è più alto di "a". Decido di usare il "cin.fail".

Il programmino viene semplice e funzionante, finchè un mio amico (begli amici) non mi insinua il dubbio: "e se sbaglia imput, perchè non metti che te lo richiede?"

Penso di eseguire la cosa previa Do While, utilizzando due funzioni diverse per lo scopo (infatti quando ho scritto la prima, mettevo return diversi tra cin.fail e programma riuscito, proprio per fare in modo che "nell'ipotetico caso il programma servisse in codici più grandi" sarebbe bastato un check sul return per sapere se il programma era andato a buon fine o no.

Io diciamo che ho provato a spicciarlmela così, ma questo termina in un loop catastrofico.


#include <iostream>
#include <stdio.h>

using namespace std;

int max (int x, int y)
{
if (x>y){
return x;
}
else {
return y;
}
}

int test() {
int num1, num2 = 0;
int massimo = 0;
cout << "inserire il primo numero" << endl;
cin >> num1;
if (cin.fail()) {
cout << "Bad Imput" << endl;
return 1;
}
else {
cout << "inserire il secondo numero" << endl;
cin >> num2;
if (cin.fail()) {
cout << "Bad Imput" << endl;
return 1;
}
else {
massimo=max (num1,num2);
cout << endl << "Il numero piu' alto tra quelli inseriti e'" << massimo << endl;
return 0;
}
}
}

int main () {
int ritorno =0;

do {
ritorno = test(); // non funziona qui -.-
}
while (ritorno!=0);
getchar();
getchar();
return 0;
}


a me sembrava potesse funzionare..invece se sbagli imput va in loop e continua a stampare "inserire il primo numero" e "bad imput"

allora ho provato a tagliare una funzione, meno elegante ma, magari, funzionante.



#include <iostream>
#include <stdio.h>

using namespace std;

int max (int x, int y)
{
if (x>y){
return x;
}
else {
return y;
}
}


int main () {
int ritorno=0;
int num1, num2 = 0;
int massimo = 0;
do {
num1=0;
num2=0;
ritorno=0;
cout << "inserire il primo numero" << endl;
cin >> num1;
if (cin.fail()) {
cout << "Bad Imput" << endl;
ritorno = 1;
}
else {
cout << "inserire il secondo numero" << endl;
cin >> num2;
if (cin.fail()) {
cout << "Bad Imput" << endl;
ritorno = 1;
}
else {
massimo=max (num1,num2);
cout << endl << "Il numero piu' alto tra quelli inseriti e'" << massimo << endl;
ritorno = 0;
}
}
}
while (ritorno=1);
getchar();
getchar();
return 0;
}


Il risultato è lo stesso, a questo punto penso che il problema sia con "cin.fail" che probabilmente non ho afferrato bene.

Sapreste aiutarmi?

Ciao, grazie a tutti :)

shodan
08-04-2011, 12:55
Una volta che cin è in errore ci rimane finché il suo stato interno non viene esplicitamente risettato a "good".
Inoltre può essere necessario ripulirlo.


if (cin.fail()) {
cout << "Bad Input" << endl;
cin.clear()
cin.ignore(INT_MAX,'\n');
return 1;
}

Loading