|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
[C] while(var!=un numero) Come si fa?
Voglio che il ciclo continui fino a che non viene immesso un numero uguale a 1 o superiore o una lettera.
C'è un modo di farlo senza lavorare con il codice ASCII? Avevo provato con mossa != %d ma non esiste ( ![]() Codice:
while(mossa<1 || mossa !=numero) { printf("\n\n Scrivi di seguito il numero corrispondente alla mossa a cui vuoi tornare: "); scanf("%d",&mossa); if(mossa<1) printf("\n Immettere un numero almeno pari a 1"); } |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
do { printf("\n\n Scrivi di seguito il numero corrispondente alla mossa a cui vuoi tornare: "); scanf("%d",&mossa); if(mossa<1) printf("\n Immettere un numero almeno pari a 1"); } while (mossa < 1); Dovresti prendere una stringa (%s), controllare prima se è la lettera e poi il numero convertito da stringa.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
while (mossa < 1) anche la condizione "se mossa non è un numero). |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Una possibilità potrebbe essere questa: Codice:
char bufmossa[11]; int ripeti; do { printf ("\n\n Scrivi di seguito il numero corrispondente alla mossa a cui vuoi tornare: "); scanf ("%10s", bufmossa); if (strlen (bufmossa) == 1 && isalpha (bufmossa[0])) ripeti = 0; else ripeti = (atoi (bufmossa) < 1); if (ripeti) printf("\n Immettere un numero almeno pari a 1"); } while (ripeti); Naturalmente non è a prova di "bomba". Ci sarebbe il caso in cui inserisci "aaa" ma ti va bene perché la atoi ti restituisce 0, che quindi ti fa ripetere il ciclo. Purtroppo molte funzioni della libreria standard del "C" non sono a "prova di bomba" (vedi atoi, gets, ecc....). ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
Ah non avevo capito cosa intendessi, adesso mi è chiaro. Non conosco acuni dei comandi che hai utilizzato, adesso mi documento un po'. Mi sa che ti devo dedicare una statua ![]() ps: cmq ho risolto così: Codice:
do { printf("\n\n Scrivi di seguito il numero corrispondente alla mossa a cui vuoi tornare: "); scanf("%s",&contieniMossa); //se uno dei 3 valori è una lettera il ciclo viene ripetuto If(isalpha(contieniMossa[0]) || isalpha(contieniMossa[1]) || isalpha(contieniMossa[2])) { mossa=0;///fa ripetere il ciclo printf("\n Per immettere un numero valido devi scegliere una mossa dall'elenco\n e digitare il suo numero corrispondente.\n"); } else mossa=atoi(contieniMossa); } while(mossa<1 || mossa >*nMosseP1+*nMosseP2); Ultima modifica di -Ivan- : 30-12-2005 alle 11:55. |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:02.