Kezdőoldal » Számítástechnika » Programozás » Az alábbi switch-case programn...

Az alábbi switch-case programnak miért ez a megoldása?

Figyelt kérdés

#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



2017. dec. 13. 13:33
 1/5 anonim ***** válasza:
100%
Mert nincsenek a case ágak break-el lezárva. Így ha az egyik case-be belép, az utána kvöetkezők is lefutnak. Az s változó értéke ugye 'b'-től 'f'-ig fog lényegében menni, amikor 'c' az értéke, akkor lefut a 'c','g' ág, amikor 'e', akkor az 'e','c','g' ág fut le. És ki is jön, "cgecg".
2017. dec. 13. 13:42
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
100%

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.

2017. dec. 13. 13:53
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:
Nagyon szépen köszönöm a válaszokat!
2017. dec. 13. 15:26
 4/5 anonim ***** válasza:

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');

2017. dec. 14. 09:25
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:
100%

"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:

2017. dec. 14. 13:06
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!