|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
[C++] Controllare il tipo di input
Ciao,
sto avendo seri dubbi su come controllare che l'input dell'user sia del tipo corretto, in un programma. Ho creato un programmino che chiede di inserire un intero, ma inserendo un carattere il programma va in loop: Codice:
cout << "Element 1 - row "; cin >> n1; Io voglio che se l'user per sbaglio inserisce un non-numero, il programma se ne accorga e riproponga l'inserimento del numero: Codice:
do {
cout << "Element 1 - row "; cin >> n1;
} while (isNotAnInteger(n1))
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Un carattere corrisponde ad un numero intero quindi pui fare un controllo del tipo
Codice:
if( (c[i] < '0' || c[i] > '9') && c[i] != ' ' ) ma cosa succede invece se hai "1 0" ?? Infatti sarebbe meglio sapere cosa devi farci con l'input (devi convertirlo in intero?) e cosa fare in situazioni del genere |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
Alla fine me ne sono uscito con questo: Codice:
cout << "Select the difficulty:" << endl;
cout << "1) Easy" << endl;
cout << "2) Medium" << endl;
cout << "3) Hard" << endl;
cout << "4) Custom: choose the grid dimension yourself (max 10x10)" << endl;
cin >> control;
while (!IsInputInteger(control)) {
cout << "You should enter a number between 1 and 4..." << endl;
cout << "1) Easy" << endl;
cout << "2) Medium" << endl;
cout << "3) Hard" << endl;
cout << "4) Custom: choose the grid dimension yourself (max 10x10)" << endl;
cin >> control;
}
difficulty = atoi(control.c_str());
bool IsInputInteger(string& line)
{
for (int i = 0; i < line.size(); ++i) {
if (!isdigit(line[i])) return false;
}
return true;
}
Più che altro mi infastidisce il fatto che l'oggetto cin non abbia un controllo del tipo di input: Codice:
int n; cin >> n; Credo che creerò una classe derivata da quella di cin aggiungendo varie funzioni di controllo. Qualcuno di voi ha già fatto così, o sa di qualcuno che l'ha fatto, oppure ogni volta aggiungete questi controlli manualmente al vostro programma? |
|
|
|
|
|
|
#4 | |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21944
|
Quote:
tipico problema che si incontra le prime volte che programmi in c++ la soluzione è abbastanza semplice 1) non acquisici una stringa ma un intero 2) converti la stringa in intero una soluzione del genere se il numero che devi inserire è strettamente positivo o negativo (ovvero l'utente non può inserire zero) la soluzione è semplicissima Codice:
cin.getline(strInput,10,'\n'); n=atoi(strInput); Codice:
char strInput[10];
int n;
do{
cout<<"Inserisci numero: ";
cin.getline(strInput,10,'\n');
cin.ignore(10,'\n');
n=atoi(strInput);
}while (n==0);
nel caso ti serva anche lo zero, controlli la stringa in input Codice:
char strInput[10];
int n;
bool err=false;
do{
cout<<"Inserisci numero: ";
cin.getline(strInput,10,'\n');
cin.ignore(10,'\n');
n=atoi(strInput);
if ((n==0)&&(strInput[0]=='0')&&(strInput[1]=='\0'))
err=false;
else
err=true;
}while (err==true);
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:04.




















