View Full Version : [C/C++] controllo caratteri inserti
zanardi84
24-01-2007, 11:23
Ciao a tutti, sto preparando il progettino per un corso di programmazione.
Sono arrivato ad un punto in cui devo fare un controllo sul carattere inserito.
Ho delle variabili int da riempire solo con dei numeri (ho fissato già l'intervallo numerico che mi occorre).
CIò che mi serve è che il programma si accorga che ho inserito un carattere diverso da un numero, me lo segnali e mi permetta di reinserire il dato opportuno.
Quindi non devo permettere che il programma si interrompa bruscamente.
Più facile è, meglio è.
Mi aiutate?
Grazie
zanardi84
24-01-2007, 15:34
Ciao a tutti, sto preparando il progettino per un corso di programmazione.
Sono arrivato ad un punto in cui devo fare un controllo sul carattere inserito.
Ho delle variabili int da riempire solo con dei numeri (ho fissato già l'intervallo numerico che mi occorre).
CIò che mi serve è che il programma si accorga che ho inserito un carattere diverso da un numero, me lo segnali e mi permetta di reinserire il dato opportuno.
Quindi non devo permettere che il programma si interrompa bruscamente.
Più facile è, meglio è.
Mi aiutate?
Grazie
Credo di aver trovato una soluzione al problema della conversione: Se io gli scrivo
variabile<='0' && variabile>='9' lui dovrebbe essere capace di riconoscere il codice ascii in automatico. Il problema però è che così controlla solo i numeri sino a 9. Da 10 in poi come posso fare?
So che dovrei comporre il numero decina + unità e fare il controllo... Ma come realizzo tutto questo?
Ancora niente invece sulla gestione intelligente dell'errore.
Qualche idea?
CIò che mi serve è che il programma si accorga che ho inserito un carattere diverso da un numero, me lo segnali e mi permetta di reinserire il dato opportuno. Dipende innanzitutto da quale funzione di input hai usato: scanf()? getchar()? altro?
variabile<='0' && variabile>='9'Tra l'altro è sbagliato: non può essete <='0' e contemporaneamente >='9' ;)
zanardi84
24-01-2007, 16:04
Dipende innanzitutto da quale funzione di input hai usato: scanf()? getchar()? altro?
Tra l'altro è sbagliato: non può essete <='0' e contemporaneamente >='9' ;)
Vero. E' una "o" non una "e" e infatti l'ho corretto subito.
Come lettura dei caratteri ho usato lo standard input quindi cin>>variabile
Come lettura dei caratteri ho usato lo standard input quindi cin>>variabilePurtroppo cin (come ad esempio scanf) è ad un livello un po' troppo "alto" e quindi non puoi fare controlli a livello di caratteri inseriti. Per essere più chiari: cin (idem scanf) si "ferma" al primo carattere riconosciuto come non valido e lo lascia nel buffer (compreso quello che segue).
Se fai:
int var1 = 0;
int var2 = 0;
cin >> var1;
cout << "Valore1: " << var1 << endl;
cin >> var2;
cout << "Valore2: " << var2 << endl;e poi al primo input inserisci i caratteri "12abc", in var1 avrai 12 mentre per la seconda cin non si fermerà ad aspettare l'input, perché è rimasto nel buffer quel "abc", che essendo non valido fa terminare subito l'input.
Questo ti può andare bene ?
int i;
do {
if(cin.fail())
{
cout << "Devi inserire un numero" << endl;
flush(cin);
}
cout << "Inserisci un numero: ";
cin >> i;
} while(cin.fail());
flush è definita così:
void flush(istream & is)
{
is.clear();
char nextChar;
while((nextChar = is.get()) != '\n' && nextChar != EOF);
is.clear();
}
zanardi84
25-01-2007, 10:36
Avrei voluto aprire un altro 3D perchè ho difficoltà con il progetto che sto cercando di realizzare.
Devo gestire un campionato a girone. Andata + ritorno.
Ho già l'elenco delle squadre iscritte. Vorrei creare il calendario in automatico partendo dalle scquadre in elenco (un vettore di strutture).
Il girone di ritorno dovrebbe essere gestito in automatico invertendo le squadre di casa e ospite del girone di andata..
Come posso procedere?
Grazie
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.