PDA

View Full Version : [C] come posso controllare la correttezza dei dati inseriti da tastiera?


VendeR
05-03-2006, 11:26
ciao a tutti!
vi espongo il mio problema: vorrei implementare nei programmi che faccio ( sono ancora un niubbo :D ) una funzione che mi permetta di controllare che i dati inseriti da tastiera da parte dell'utente siano corretti (nel mio caso l'utente deve inserire valori interi). come posso realizzare una funz che controlli che i dati inseriti siano veramente interi??
thx in anticipo :)

mostec
05-03-2006, 13:17
int leggiValore()
{
const int MAX_CARATTERI = 10;
int stato, i;
char ch, strBuffer[MAX_CARATTERI] ;

i = 0;
stato = 1;
fflush(stdin);
while ((ch = getchar()) != '\n' && stato == 1)
{
if (i < MAX_CARATTERI)
{
if (isdigit(ch))
strBuffer[i++] = ch;
else
stato = -1;
}
else
stato = -2;
}
fflush(stdin);
if (stato == 1)
{
strBuffer[i] = '\0';
return atoi(strBuffer);
}
else
return stato;
}
restituisce il numero in caso sia corretto altrimenti restituisce -1 se l'inserimento non è di interi e -2 se è un numero con più di 10 cifre.

ciao.

VendeR
05-03-2006, 13:51
wow grazie mille davvero!!! ti spiace solo se ti faccio un paio di domande sul codice?
allora:
- devo includere qualche libreria particolare o basta stdio.h?
- fflush(stdin),isdigit(ch) e atoi(strBuffer) cosa fanno? non le ho mai studiate queste funzioni (come avevo già detto sono in niubbo..) .
grazie mille!

mostec
05-03-2006, 17:31
fflush(...) è una funzione che svuota il buffer che ha come argomento(stdin è il buffer input e stdout buffer di output).

atoi(vettore) trasforma un vettore di char in un numero int (atoi =Array TO Int).

isdigit(carattere) verifica se il carattere che ha come argomento è un INTERO.

per le librerie non ricordo in quale siano cmq a pelle direi che sono tutte in stdio.h se non sono lì prova in stdlib.h.

ciao.

Ziosilvio
05-03-2006, 20:46
devo includere qualche libreria particolare o basta stdio.h?
Dipende: fflush è dichiarata in stdio.h, isdigit in ctype.h, e atoi in stdlib.h.
fflush(stdin),isdigit(ch) e atoi(strBuffer) cosa fanno?
fflush, chiamata su uno stream di output, provoca la scrittura dei caratteri rimasti nel buffer, restituendo EOF in caso di errore e 0 in caso di esecuzione regolare.
Attenzione: il comportamento di fflush su uno stream di input è indefinito, per cui fflush(stdin) non è standard e non è portabile.

isdigit restituisce 1 se il suo argomento è uno dei caratteri che rappresentano le cifre decimali, e 0 altrimenti.

atoi restituisce il valore intero rappresentato, in decimale dal prefisso della stringa di caratteri che è il suo argomento.

Per le altre funzioni della libreria standard, procurati un buon manuale (io suggerisco sempre il Kernighan&Ritchie).

VendeR
06-03-2006, 08:30
grazie ad entrambi per le precisazioni!!! mi metto subito all'opera...
Per le altre funzioni della libreria standard, procurati un buon manuale (io suggerisco sempre il Kernighan&Ritchie).
il k&r ce l'ho ma è un pò un casino per me :muro: :muro:
ci sono troppi pochi esempi :D
cmq dovrei prendermi il deitel&deitel, dei miei amici mi hanno detto che è fatto abbastanza bene