View Full Version : Come il contollo dell'input in C?
Algeroth
08-01-2006, 02:12
Salve a tutti,
come posso effettuare un controllo dell'input in C?
ossia come posso dire ad una scanf di prendere solamente interi tra 0 e 10?
:muro: :muro: :muro:
:doh:
Ciao a tutti
Salve a tutti,
come posso effettuare un controllo dell'input in C?
ossia come posso dire ad una scanf di prendere solamente interi tra 0 e 10?
Ciao, la scanf non consente di specificare ed effettuare controlli a quel livello. Una volta che la scanf ti ha restituito il numero, lo controlli tu come vuoi.
AbuJaffa
08-01-2006, 11:59
Ciao, la scanf non consente di specificare ed effettuare controlli a quel livello. Una volta che la scanf ti ha restituito il numero, lo controlli tu come vuoi. :nonsifa:
Certo che si può. Mai sentito parlare di "gruppi di scansione"?
Questo codice mette in str solo le cifre da 0 a 10. Se si inseriscono altri caratteri alfanumerici la scanf li ignora.
char str[10]={""};
scanf("%[0-1-2-3-4-5-6-7-8-9-10]",str);
printf("%s",str);
ciao. http://mastrocane.altervista.org/_altervista_ht/ciao.gif
Certo che si può. Mai sentito parlare di "gruppi di scansione"?
Questo codice mette in str solo le cifre da 0 a 10. Se si inseriscono altri caratteri alfanumerici la scanf li ignora.
char str[10]={""};
scanf("%[0-1-2-3-4-5-6-7-8-9-10]",str);
printf("%s",str);
Allora ...
1) La forma generale standard per lo specificatore di formato nelle funzioni Xscanf è:
% [width][modifiers]type
2) Esiste effettivamente la possibilità di usare una forma speciale %[...caratteri...] ma attenzione: è una estensione "comune" e non è standard ANSI "C".
3) Lo specificatore speciale %[...caratteri...] vale solo per le stringhe (è una alternativa al posto dello specificatore di tipo 's') e permette di definire solamente un "set di caratteri" accettato. Quindi non opera su dei "numeri" e non sa di dover controllare un range di numeri. Non si può quindi, ad esempio, limitare l'input per i numeri tra 7 e 33.
4) L'esempio che hai fatto tu, non limita l'input solo tra 0 e 10. Puoi anche mettere 11, 123, 754 e la scanf ti restituisce correttamente la stringa e ti ritorna 1 (cioè 1 campo assegnato correttamente). Si ferma solamente quando incontra un carattere che non è tra quelli che sono stati specificati (es. inserendo una 'a' o un '+').
Documentati prima, magari ... ;)
Algeroth
08-01-2006, 14:28
Il codice relativo alla discussione da aperta è:
while(1){
printf("Immettere un numero compreso tra 1 e 10\n");
scanf("%d", &n);
if(n>=1 && n<=10)
break;
}
In questo segmento di programma se io immetto una lettera il programma va in loop continuando a scrivere all'infinito "Immettere un numero compreso tra 1 e 10", mentre se scrivo un numero al di fuori dell'intervallo compreso tra 1 e
10 mi fa rifare la scanf.
Saranno i misteri del C?
MAH.......
Ringrazio tutti i partecipanti a questa discussione
Ciao ciao
:muro:
Gandalf_BD
08-01-2006, 14:34
va in loop perchè tu gli passi un %c e la scanf si aspetta un %d...
...giusto, guru del forum? :D
while(1){
printf("Immettere un numero compreso tra 1 e 10\n");
scanf("%d", &n);
if(n>=1 && n<=10)
break;
}
Innanzitutto l'uso di scanf in questo modo e per di più in un loop così, è da evitare come la peste bubbonica! ;)
Il motivo del perché va in loop è semplice. Quando si chiede alla scanf un numero (%d) e la scanf riceve un carattere che non è un numero (es. una lettera 'a'), la conversione termina ma il carattere non accettato rimane nello stream di input! Quindi la scanf continuerà a leggere questa lettera 'a' all'infinito.
Algeroth
08-01-2006, 15:16
Io colgo ancora l'occasione per ringraziare tutti,
ma ancora nn capisco se potete aiutarmi.
Ossia esiste quindi un modo per poter accettare in ingresso solo interi compresi tra 1 e 10?
:mc:
Grazie ancora
ciao ciao
AbuJaffa
08-01-2006, 15:22
Allora ...
1) La forma generale standard per lo specificatore di formato nelle funzioni Xscanf è:
% [width][modifiers]type
2) Esiste effettivamente la possibilità di usare una forma speciale %[...caratteri...] ma attenzione: è una estensione "comune" e non è standard ANSI "C".
3) Lo specificatore speciale %[...caratteri...] vale solo per le stringhe (è una alternativa al posto dello specificatore di tipo 's') e permette di definire solamente un "set di caratteri" accettato. Quindi non opera su dei "numeri" e non sa di dover controllare un range di numeri. Non si può quindi, ad esempio, limitare l'input per i numeri tra 7 e 33.
4) L'esempio che hai fatto tu, non limita l'input solo tra 0 e 10. Puoi anche mettere 11, 123, 754 e la scanf ti restituisce correttamente la stringa e ti ritorna 1 (cioè 1 campo assegnato correttamente). Si ferma solamente quando incontra un carattere che non è tra quelli che sono stati specificati (es. inserendo una 'a' o un '+').
Documentati prima, magari ... ;)
Scusa papà...questa volta hai ragione tu. ;)
Scusa papà...questa volta hai ragione tu. ;)
:eek: Ma ... come ti permetti?!
AbuJaffa
08-01-2006, 15:38
:eek: Ma ... come ti permetti?!
:mbe:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.