|
|
|
|
Strumenti |
01-09-2014, 15:14 | #1 |
Member
Iscritto dal: Oct 2008
Messaggi: 42
|
[c++] controllo input
Ciao a tutti
Codice:
#include <cstdlib> #include <iostream> using namespace std; const int MAX_FIUMI = 300; const int MAX_CITTA = 100; int FiumiCitta [MAX_FIUMI] [MAX_CITTA] ; void CaricaPerFiume (int FiumiCitta [MAX_FIUMI] [MAX_CITTA], int n_fiumi, int n_citta) { for (int fiumi=0; fiumi<n_fiumi; fiumi++) for (int citta=0; citta<n_citta; citta++) { do { cout <<endl <<" Inserire 1 se il fiume " <<fiumi +1<< " bagna la citta " <<citta +1 << " ,0 se non la bagna "; cin >>FiumiCitta [fiumi] [citta]; cout <<endl; if (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1) cout <<" Errore inserire 1 o 0" <<endl; } while (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1); TNX a tutti Ultima modifica di carugo : 01-09-2014 alle 15:21. |
01-09-2014, 16:44 | #2 |
Senior Member
Iscritto dal: Dec 2006
Messaggi: 3808
|
riporta un esempio completo, incluso il main e un esempio di input per la tua funzione .
|
01-09-2014, 17:30 | #3 |
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Tempo fa avevo pensato un po' a come fare, ma non ricordo la soluzione che avevo scelto. A pensarci un po' sbrigativamente, e contando che non tocco il C++ da un po', ho tirato fuori questo:
Codice:
#include <iostream> #include <string> using namespace std; int read_int_from_console() { READ: string in; cin >> in; try { return stoi(in); // stoi converte una string ad int; se non riesce, lancia eccezione } catch (exception ex) { cout << "string " << in << " couldn't be cast to int!!" << endl << endl; goto READ; } } int main() { cout << "Enter an integer number." << endl; int n = read_int_from_console(); cout << "You entered: " << n << endl << endl; return 0; } Problema: se scrivi 12asdas in console, ti viene restituito 12 anzichè dare errore. Soluzione: pensaci tu, questa risposta è solo un suggerimento sulla strada da percorrere |
02-09-2014, 07:47 | #4 |
Member
Iscritto dal: Dec 2003
Messaggi: 70
|
Nel caso suggerirei questa variante che evita il 'GOTO'.
int read_int_from_console() { int ret; string in; bool loop = false; while(!loop) { cin >> in; try { ret = stoi(in); loop = true; } catch (exception ex) { cerr << "Error!" << endl; } } return ret;} |
02-09-2014, 09:27 | #5 |
Member
Iscritto dal: Oct 2008
Messaggi: 42
|
Grazie a tutti per le risposte questo è l 'intero codice
Codice:
#include <cstdlib> #include <iostream> using namespace std; const int MAX_FIUMI = 300; const int MAX_CITTA = 100; int FiumiCitta [MAX_FIUMI] [MAX_CITTA] ; void CaricaPerFiume (int FiumiCitta [MAX_FIUMI] [MAX_CITTA], int n_fiumi, int n_citta) { for (int fiumi=0; fiumi<n_fiumi; fiumi++) for (int citta=0; citta<n_citta; citta++) { do { cout <<endl <<" Inserire 1 se il fiume " <<fiumi +1<< " bagna la citta " <<citta +1 << " ,0 se non la bagna "; cin >>FiumiCitta [fiumi] [citta]; cout <<endl; if (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1) cout <<" Errore inserire 1 o 0" <<endl; } while (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1); } } void StampaPerFiume (int FiumiCitta [MAX_FIUMI] [MAX_CITTA], int n_fiumi, int n_citta) { for (int fiumi=0; fiumi<n_fiumi; fiumi++) { cout << endl << "Situazione per il fiume" <<fiumi +1 <<": "; for (int citta=0; citta<n_citta; citta++) cout <<FiumiCitta [fiumi] [citta]; } } void CaricaPerCitta (int FiumiCitta [MAX_FIUMI] [MAX_CITTA], int n_fiumi, int n_citta) { for (int citta=0; citta<n_citta; citta++) for (int fiumi=0; fiumi<n_fiumi; fiumi++) { cout <<endl <<" Inserire 1 se la citta " <<citta +1<< " e' bagnata dal fiume " <<citta +1 << " ,0 se non e' bagnata "; cin >>FiumiCitta [fiumi] [citta]; } } int main(int argc, char *argv[]) { CaricaPerFiume (FiumiCitta,3,2); //CaricaPerCitta (FiumiCitta,3,2); //StampaPerFiume (FiumiCitta,3,2); cout <<endl; system("PAUSE"); return EXIT_SUCCESS; } Codice:
do { cout <<endl <<" Inserire 1 se il fiume " <<fiumi +1<< " bagna la citta " <<citta +1 << " ,0 se non la bagna "; cin >>FiumiCitta [fiumi] [citta]; cout <<endl; if (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1) cout <<" Errore inserire 1 o 0" <<endl; } while (FiumiCitta[fiumi] [citta] != 0 && FiumiCitta[fiumi] [citta] != 1); TNX A TUTTI Ultima modifica di carugo : 02-09-2014 alle 09:45. |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:06.