ANSI C-ben megváltoztathatom a ciklusváltozót egy for cikluson belül?
Meg lehet változtatni de az egy nagyon rossz programozási szokás és szinte minden esetben van rá jobb megoldás. Nem csak zavaró és bugok forrása lehet, de jelzi hogy a programod rosszul van strukturálva. A ciklusváltozó megváltoztatása helyett érdemes elgondolkozni a continue és break kulcsszavakon, a feltétele elágazásokon és a beágyazott ciklusokon.
Például:
int i;
for(i = 0; i < _; i++)
if(...) i+=1;
helyett írd inkább hogy
int i;
for(i = 0; i < _; i++)
if(...) continue;
Ugyan az igaz a csökkentésnél is, ahelyett hogy utólag csökkented a változót, csak akkor érje el a ciklus végét ha tényleg növelni akarsz rajta.
Át kell gondolni a dolgot, nem nagyon tudok olyan esetről ahol indokolt lenne a ciklusváltozó megváltoztatása.
Növelésnél természetesen jó a continue, de akkor mi van ha:
int i;
for(i = 0; i < _; i++)
if(...)valami;
else --i;
Mondjuk használsz helyette while ciklust?
int i;
i = 0;
while (i<_) {
if (...) {
i--
} else {
i++
}
}
Ha feltételesen növelni és csökkenteni is kell a ciklusváltozót (vagy feltételesen növelni), akkor szerintem nem for ciklust kéne használni, hanem while-t. Pl. itt egy hülye rendezés:
int i;
for(i = 0; i < _; i++)
if(...)valami;
else --i;
Ennek nincs értelme mert ha a feltétel nem teljesül akkor nem történik semmi, azaz nem változik a ciklusváltozó, végtelen ciklusban ragad. Látod hogy nem is annyira átlátható így már?
Ez ekvivalens ezzel:
int i;
for(i = 0; i < _; i++) {
while(!...); //amíg nem teljesül a feltétel, nem növelünk ciklusváltozót
valami; //ha teljesül, akkor lefut a valami és a következő iterációra ugrik
}
Ez utóbbinál már látszik mi történik!
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!