/ / Prepnúť vyhlásenie nerealizuje to, čo očakávam - c

Prepnúť vyhlásenie nerealizuje to, čo očakávam - c

Č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ď č. 1

Na 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, pozri break (6.6.1).

6.6.1 Prehlásenie o zlomení [stmt.break]

Na break vyhlásenie sa vyskytujú iba v príkaze Iterácia alebo switch 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:
// ...
}