Čo sa deje s týmto kódom:
switch (n)
{
case 0: strcpy(resultString, "Zero");
case 1: strcpy(resultString, "One");
case 2: strcpy(resultString, "Two");
case 3: strcpy(resultString, "Three");
case 4: strcpy(resultString, "Four");
case 5: strcpy(resultString, "Five");
case 6: strcpy(resultString, "Six");
case 7: strcpy(resultString, "Seven");
case 8: strcpy(resultString, "Eight");
case 9: strcpy(resultString, "Nine");
}
printf("%s", resultString);
Vždy vytlačí "deväť" bez ohľadu na hodnotu n. Čo robím zle??
odpovede:
13 pre odpoveď č. 1Na konci každého prípadu potrebujete vyhlásenie o prerušení. V opačnom prípade riadenie spadne priamo do ďalšieho prípadu.
Zmeňte svoj kód na:
switch (n)
{
case 0: strcpy(resultString, "Zero");
break;
case 1: strcpy(resultString, "One");
break;
case 2: strcpy(resultString, "Two");
break;
case 3: strcpy(resultString, "Three");
break;
case 4: strcpy(resultString, "Four");
break;
case 5: strcpy(resultString, "Five");
break;
case 6: strcpy(resultString, "Six");
break;
case 7: strcpy(resultString, "Seven");
break;
case 8: strcpy(resultString, "Eight");
break;
case 9: strcpy(resultString, "Nine");
break;
}
printf("%s", resultString);
Príkaz prepínačov nájdete v dokumente tu alebo v akejkoľvek knihe v jazyku C.
4 pre odpoveď č. 2
Po každom prípade je potrebné prestávku.
case 0:
do soemthing;
break;
case 1:
do something;
break;
V mnohých spravovaných jazykoch sa nepripúšťa, že jeden prípad prepadne inému, "a chystá chybu, ale C miluje, aby ste robili čokoľvek, čo chcete!
1 pre odpoveď č. 3
Zmeškal si break;
po každom prípade
Example :
case 0: strcpy(resultString, "Zero");break;
..
..
case 8: .... ; break;
..
1 pre odpoveď č. 4
Zo štandardu:
6.4.2 Výkaz prepínača [stmt.switch]
prípadové štítky a predvolené štítky samy osebe nemenia tok ovládania, ktorý na týchto štítkoch pokračuje bez prekážok. Ak chcete ukončiť režim a
switch
, pozribreak
(6.6.1).6.6.1 Prehlásenie o zlomení [stmt.break]
Na
break
vyhlásenie sa vyskytujú iba v príkaze Iterácia aleboswitch
vyhlásenie a príčiny ukončenia najmenšie ohraničujúci Iterácia vyhlásenie alebo prepínač vyhlásenie; ovládanie prechádza vyhlásenie po príkaze ukončené prípadné.
Znamená, že ste don "t použiť break
po každom case
, program zadá v prvý case
Kto zodpovedá stavu a bude pokračovať, vykonávajúci každý riadok switch
až do konca.
Ste mali len urobiť niečo ako:
switch( n )
{
case 0:
// ...
break; // <- Note the break
//...
default:
// ...
}