Az alábbi switch-case programnak miért ez a megoldása?
#include <stdio.h>
int main(){
char s;
for(s='b'; s<'g'; s++)
switch (s) {
case 'a': printf("%c",'a');
case 'e': printf("%c",'e');
case 'c': printf("%c",'c');
case 'g': printf("%c",'g');
}
printf("\n"); system("PAUSE"); return 0;
}
Vizsgára készülök. A feladat az lenne, hogy ez alapján le tudjam írni, hogy mit ír ki a program, anélkül, hogy lefuttatnám. Nos én úgy tudom, hogy a megoldás cgecg. Tudna nekem valaki segíteni abban, hogy miért? Elég fontos lenne megértenem :D
s értéke rendre: b c d e f
Következő ciklusmag. s = 'b'-vel -> nem írodik ki semmi.
Következő ciklusmag. s = 'c'-vel -> kiírodik a c, majd a g is, mivel a case nincs lezárva break-kel.
Következő ciklusmag. s = 'd'-vel -> nem írodik ki semmi.
Következő ciklusmag. s = 'e'-vel -> kiírodik az e, a c, majd a g, mivel egyik case ág sincs lezárva break-kel.
Következő ciklusmag. s = 'f'-fel -> nem írodik ki semmi.
Ugyanaz, picit mésképp:
Ezek futnak le:
case 'c': printf("%c",'c'); // nincs break !
case 'g': printf("%c",'g');
// ...
case 'e': printf("%c",'e'); // nincs break !
case 'c': printf("%c",'c'); // nincs break !
case 'g': printf("%c",'g');
"Elég fontos lenne megértenem"
Egy kis segítség a megértéshez:
switch (s) {
case 'a': printf("%c",'a');
case 'e': printf("%c",'e');
case 'c': printf("%c",'c');
case 'g': printf("%c",'g');
}
Ez kb így működik, pontosabban ilyesmi kóddá fordul. (Nem valódi program, csak a megértés végett)
if (s=='a') goto a // a goto a,e,stb. csak cimkék, memóriacímek
if (s=='e') goto e
if (s=='c') goto c
if (s=='g') goto g
goto end
a: printf(..)
e: printf(..)
c: printf(..)
g: printf(..)
end:
Ez pedig...
switch (s) {
case 'a': printf("%c",'a'); break;
case 'e': printf("%c",'e'); break;
case 'c': printf("%c",'c'); break;
case 'g': printf("%c",'g'); break;
}
Ezzé fordul:
if (s=='a') goto a
if (s=='e') goto e
if (s=='c') goto c
if (s=='g') goto g
goto end
a: printf(..); goto end:
e: printf(..); goto end:
c: printf(..); goto end:
g: printf(..); goto end:
end:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!