|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2005
Messaggi: 70
|
[C]URGENTE
Ciao a tutti,
questo è un segmento di codice che in esecuzione se immetto un carattere va in loop. Qualcuno può aiutarmi? while(1){ printf("Inserire il numero di posti che si desidera prenotare(Massimo %d prenotazioni)\n", MAXPREN); scanf("%d", &n); if (n>0 && n<=10) break; |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
char buf[20];
int n;
while(1)
{
printf("Inserire il numero di posti che si desidera prenotare(Massimo %d prenotazioni)\n", MAXPREN);
if (fgets(buf, sizeof (buf), stdin) != NULL)
{
if (sscanf(buf, "%d", &n) == 1 && n>0 && n<=10)
break;
}
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Ti sei appena scontrato con uno dei problemi di scanf: l'input deve essere del tipo preciso indicato dal primo argomento.
Il comportamento è questo: finché la sequenza di caratteri si accorda con il tipo dell'oggetto previsto, scanf continua a leggere; quando non lo è più, rimette a posto sullo standard input l'ultimo carattere e termina. Te la puoi cavare ricordando che scanf restituisce un valore intero, pare al numero di sottostringhe convertite in oggetti: quindi, ad esempio, scanf("%d",&n) restituisce 1 se la sequenza di caratteri presente sullo standard input corrisponde a un intero, e 0 altrimenti. Allora puoi fare in modo che, in caso di input errato, lo standard input venga ripulito: così: Codice:
for (;;) {
if (scanf("%d",&n)==1) break;
while (getchar() != '\n')
;
}
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2004
Messaggi: 760
|
scusa, ma ti è stato spiegato nel tuo post precedente sulla scanf!!!
__________________
Gandalf_BD -------------------------------------------- "When you aim at perfection, you discover it's a moving target" |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:12.



















