PDA

Visualizza la versione completa : [C] Switch e uscita dal blocco selettivo


Ifrit
02-12-2007, 16:42
Salve a tutti :-)

allora stavo buttando giu qualkosa per fare un po di pratica e ho riscontrato un piccolo problema, ovvero, come primo codice ho scritto questo.:




int main()
{

int sel;

system("color 0a"), ("cls");

do
{

printf("\t\t *** Gestore Spesa ***\n\n");
printf("\t 1. Aggiungi Elemento\n\t 2. Modifica Elemento\n\t 3. Contralla Lista Negozio\n\t 0. Esci\n\nSelezionare Opzione: ");


scanf("%d", &sel);



switch (sel)
{
case 0: break;
case 1:
system("cls");
printf ("case 1");
break;

case 2:
system("cls");
printf ("case 2");
break;

case 3:
system("cls");
printf ("case 3");
break;

default:
system ("cls");
printf(" \n\tErrore - ! Opzione non riconosciuta !\n\n");

}

} while ( sel!= 0);


printf("\n\n");
system("pause");
}



successivamente ho fatto una legera modifica perche' quando viene inserito una lettera inceve che un numero si inceppa il programma, pertanto ho scritto questo:




int main()
{

char select;
int sel;

system("color 0a"), ("cls");

do
{

printf("\t\t *** Gestore Spesa ***\n\n");
printf("\t 1. Aggiungi Elemento\n\t 2. Modifica Elemento\n\t 3. Contralla Lista Negozio\n\t 0. Esci\n\nSelezionare Opzione: ");


scanf("%c", &select);


sel = (int)select - 48;

switch (sel)
{
case 0: break;
case 1:
system("cls");
printf ("case 1");
break;

case 2:
system("cls");
printf ("case 2");
break;

case 3:
system("cls");
printf ("case 3");
break;

default:
system ("cls");
printf(" \n\tErrore - ! Opzione non riconosciuta !\n\n");

}

} while ( sel!= 0);


printf("\n\n");
system("pause");
}



ma qui il problema e come se i breack non funzionano....qualkuno mi sa dire il xke?

p.s.
alla linea


sel = (int)select - 48;


volevo scrivere:


(int)sel = (int)select - 48;

ma il compilatore mi da errore

Xaratroom
02-12-2007, 21:22
Non puoi scrivere (int)sel = .... perchč non puoi fare il casting in questo modo, quindi il compilatore non č pazzo ...
Il break ti fa uscire dal blocco selettivo ma non dal while, naturalmente ...

Ifrit
02-12-2007, 23:17
si infatti, il problema e ke nonostante il break il case default viene esegito ugualmente

mostec
03-12-2007, 03:43
puoi risolverlo leggendo da input UN carattere ma poi utlizzando i case in questo modo:


case '0':
.................
case '1':
.........


nel modo che stai usando tu confronti se il carattere effettivamente inserito corrisponde nella tabella ascii ai valori 0 1 2 ecc. cosa che mi sembra sia poco fattibile visto che sono caratteri "deprecati" utilizzati in precedenza in telescriventi ecc. ma ora nn pių utilizzati.. ma di questo non son sicuro dovrei riguardare..

prova a utilizzare i case con i due apici ' ' .


edit:
ho controllato la tabella ascii.. ora ti faccio un esempio.


char c;
scanf("%c",&c);
switch(c){
case 0:
...... //entra qui quando c == '\0'
case 1:
........ //controlla che c sia un carattere speciale che indica "start of heading"

/* Mentre effettivamente */
case '0':
...... // entra qui quando c == '0' ovvero proprio lo 0


non so se son stato chiaro.. altrimenti chiedi pure.
ti incollo il link alla pagina di wiki se vuoi darci un occhio
http://it.wikipedia.org/wiki/ASCII

fa sapere se puoi ti funziona :P

Loading