C nyelven tanulok, valaki segítene a for ciklussal? Miért ugyanazt kapom végeredményül? Nem úgy kellene működnie, hogy az első verzió 5-től, a második 6-tól írja ki 21-ig a számokat?
#include <stdio.h>
int main()
{
int i;
for(i=5;i<=21;i++)
printf("%d\n", i);
return 0;
}
----------------------
#include <stdio.h>
int main()
{
int i;
for(i=5;i<=21;++i)
printf("%d\n", i);
return 0;
}
Előre is köszönöm a választ!
#3: Mért ugorna ki? Az nem abban a blokkban van, csak a kérdező nem formázta meg a kódot:
int main()
{
int i;
for(i=5;i<=21;i++)
printf("%d\n", i);
return 0;
}
Amúgy a kérdésre a válasz, tökmindegy, hogy az i változót hgoy inkrementálod, ez csak a kifejezés értékénél számít, de az pedig nincs használva. A for 3. "paramétere" mindig a ciklusmag után hajtódik végre.
Az inkrementálás sorrendje pl ilyen esetegben számít:
int a = i++;
int b = ++i;
tudod postfix inkrementálás esetében létrejön egy temporális(ideiglenes) érték amit vagy hozzá rendelsz egy változóhoz vagy nem és ez után pedig automatikusan meg is szűnik létezni.
int y = 5;
y++; létrejön az ideiglenes érték amit nem rendelünk hozzá semmihez majd y értékét megnöveljük eggyel, y most 6
int x = y++; itt pedig hozzárendeljük x hez ezért x 6 lesz y pedig 7
Gondoltam, hogy a prefix/postfix zavar be. Az csak akkor számít, ha fel is használod a kifejezés értékét:
a = 5
b = a++; // a = 6, b = 5
b = ++a; // a = 6, b = 6
Mivel te az i++ és a ++i kifejezések értékét nem használod fel, teljesen mindegy, hogy melyik van oda írva. A ciklusmag így is, úgy is a for() után fut csak le, amikor i értéke már növelve van, és mindegy, hogy post- vagy prefix operátorral növeled.
#include <stdio.h>
int main()
{
int i, j;
for( i = 5; i <= 21; j = i++) printf("%d\n", j);
printf("\n");
for(i = 5; i <= 21; j = ++i) printf("%d\n", j);
return 0;
}
Ha ezt a "for" ciklust felírjuk "while" ciklussal, akkor látszik, hogy a "++i" egy külön utasítás, ami mindig a ciklusmag után hajtódik végre.
#include <stdio.h>
int main()
{
int i;
i = 5;
while (i <= 21) {
printf("%d\n", i);
++i; // Ez a ciklusmag után hajtódik végre.
}
return 0;
}
sharkxxx válasza is jól magyarázza, de én is megpróbálom
amit elvileg már tudsz:
Az i++ elmenti a régi értéket megnöveli, majd a mentet értéket adja vissza.
A ++i megnöveli az értéket, majd az új értéket adja vissza.
-----------------------------------------------_
A for ciklus nem "lineáris lefutású" 1,2,3,4-nek indexelem a ciklus részeit.
for (1,2,3){4}
De ez ilyen sorrendben fut le:
1,
loop:
ha(2)4
3
PL:
1,
2,
4,
3,
1,
2
Ha csak egyszer fut le
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!