PDA

Visualizza la versione completa : [c] switch e uscita dal programma


cristianc
07-06-2008, 15:02
Sono alle prese con un programma che fa uso di opzioni di scelta.
La variabile char x puo assumere tramite uno switch case i valori a,b,c,d,e e ovviamente default.
La parte di codice riguardante default e':

default:
printf("Opzione inesistente\n");
break;

Questo switch e' inserito all'interno di un ciclo do...while e nella condizione appunto c'e':

while(x!='q');
che mi fa uscire dal programma.Come e' chiaro dal codice il problema sorge in quanto ogni volta che premo q per uscire viene si eseguito il comando,ma si trascina dietro quel fastidioso opzione inesistente.
E' ovviamente logico che sia cosi e ne capisco la causa,ma non so come risolvere.

oregon
07-06-2008, 15:34
Prevedi un

case 'q':
break

che non faccia nulla ma evita il messaggio ...

cristianc
07-06-2008, 15:42
Si, in questo caso non farebbe niente, ma si ripeterebbe il ciclo e non si uscirebbe dal programma.

oregon
07-06-2008, 15:50
Originariamente inviato da cristianc
Si, in questo caso non farebbe niente, ma si ripeterebbe il ciclo e non si uscirebbe dal programma.

E perche' mai?

Se non mostri il resto del codice non si capisce il perche' ...

cristianc
07-06-2008, 16:00
lo switch si ripete perche e' inserito in un ciclo.
Se io inserissi 'q' nello switch non verrebbe fatto quello che gli vorrei assegnare,cioe l'uscita dal programma,Non verrebbe fatto niente ed uscirebbe dallo switch..case ma non impedirebbe la successiva esecuzione del ciclo.Il ciclo come l'ho messo io(e quindi anche lo switch) si ripete proprio finche non premo 'q'.

oregon
07-06-2008, 16:08
Lo mostri il codice, come ti avevo chiesto ... ?

mondobimbi
07-06-2008, 16:12
while (x != q) {
....
switch (x) {
case .. : ....
break;
case q :
break;
default :
....
break;
}
...
}
...

anch'io la ho interpretato come oregon e penso che il suo suggerimento si corretto.

ciao
sergio

metal_prog
07-06-2008, 16:13
Oregon ha ragione: se il tuo è il caso seguente


do {
switch(x)
{
case('a'):
break;
case('b'):
break;
case('c'):
break;
case('d'):
break;
case('q'):
break;
default:
printf("Opzione inesistente\n");
break;
}
}while(x!='q');

Perché non dovrebbe uscire? :confused: l'opzione di controllo del ciclo while verrebbe eseguita comunque...

cristianc
07-06-2008, 16:14
do
{
printf("\n\tMENU DI PROVA\n\n\ta) Per immettere dati\n\tb) Per determinare il maggiore\n\tc) Per determinare il minore\n\td) Per ordinare\n\te) Per visualizzare\n\n");
printf("[PER USCIRE PREMERE q]\t\tScelta(a,b,c,d,e): ");
x=getchar();
while(!getchar());
switch(x) {
case 'a':
.....
case 'b':
.....
case 'c':
.....
case 'd':
.....
case 'e':
.....
default:
.....
}
printf("\n");
} while(x!='q');


Tutto qui

oregon
07-06-2008, 16:19
Originariamente inviato da cristianc


Tutto qui

E l'hai provato?? Perche', come ti ho detto, funziona regolarmente ... se inserisci la

case 'q':
break;

il programma termina regolarmente ...

Loading