PDA

View Full Version : [C]Validazione stretta


The_misterious
08-02-2010, 22:49
Sto studiando un'argomento che ancora non mi è molto chiaro, la validazione stretta.
Mettiamo che ho una cosa di questo tipo:
PuntatoreInsieme crea_insieme(void)
{
PuntatoreInsieme insieme = NULL;
int valore = 0;
int risposta = 0;

while(risposta == 0)
{
/* acquisire il valore intero tramite tastiera */
printf("Inserisci un elemento intero da aggiungere all'insieme: ");
scanf("%d", &valore);

/* stampare a video il valore */
printf("valore: %d \n", valore);

/* inserire il valore acquisito all'interno dell'insieme */
inserisci_in_coda(&insieme, valore);

/* stampare a video l'insieme */
stampaInsieme(insieme);

/* incrementare o arrestare gli elementi dell'insieme */
printf("Vuoi continuare ad inserire? (S=0/N=1)" );
scanf("%d", &risposta);
printf("\n");
}

return insieme;
}

e vorrei fare in modo che vengano accettati in input solo numeri interi, quindi niente decimali, lettere ecc come caspiterina devo fare?
su google non riesco a trovare niente e nemmeno sul kernighan Ritchie.
Mi sapete aiutare?

Jecko
08-02-2010, 22:57
nella libreria ctype.h sono presenti le funzioni
isalpha
isdigit
isalnum

tutte e tre restituiscono 1 o 0 nel caso in cui il carattere (char) che tu stia esaminando sia rispettivamente un carattere, una cifra oppure almeno una delle due. potresti quindi sempre acquisire una stringa, analizzarla carattere per carattere (o tokenizzarla ad esempio) e mettere in coda solo gli elementi interi (per numeri composti da più cifre ricorri alla funzione atoi() o anche strtod()). Non sono stato troppo preciso ma penso di averti dato qualche spunto! buon lavoro

fero86
09-02-2010, 17:47
se ti puo essere utile, scanf restituisce il numero di parti del format string ricevute con successo, quindi se ad esempio l'input é valido per il format string "%d" la scanf restituisce 1, altrimenti 0.