Inkrementacja licznika w cout'cie

0

Cześć!
Mam pytanie co do wyświetlania licznika cout'em zwiększonego o jakąś wartość.
Mianowicie:

 #include <iostream>
using namespace std;

int main()
{
	for(int i=19;i>9;i-=3) 
	{
		if(i%3)
		{
			cout<<i++<<" % "<<endl;
		}
		cout<<endl;
	}
	return 0;
} 
 #include <iostream>
using namespace std;

int main()
{
	for(int i=19;i>9;i-=3) 
	{
		if(i%3)
		{
			cout<<i+1<<" % "<<endl;;
		}
		cout<<endl;
	}
	return 0;
} 

Te kody różnią się tylko i++ i i+1. Dlaczego w pierwszym przypadku wartość licznika jest zwiększana w dopiero po wyświetleniu, a w następnym zwiększa tylko dla wyświetlenia? Wiem co to jest pre i postinkrementacja, ale potrzebuje metorycznego wyjaśnienia dla tego zjawiska. Dzieki za odpowiedź

1

Czegoś nie rozumiem, potrzebujesz metorycznego wyjaśnienia czemu postinkrementacja działa jak postinkrementacja?

0

Dlatego, że użyłeś operatora (post)inkrementacji. Jak sama nazwa wskazuje, najpierw zwraca wartość, a potem inkrementuje zmienną.

0

@napster myślałem że w cout'cie nie będzie on zwiększać licznika, tak jak w drugim kodzie. Temat do zamknięcia, dzięki za wyjasnienie :)

1

Istnieje jeszcze zasadnicza różnica między tymi dwoma kodami. Użycie operatora (post/pre)inkrementacji powoduje zmianę zmiennej i w pętli. Tak więc jeśli po wypisaniu byś jej jeszcze używał raz, to już by miała inną wartość. Co mogłoby zmieniać działanie algorytmu.

W przypadku i+1 zwiększanie wartości zmiennej nie następuje, bo jest to tylko wartość wypisana na ekranie. W dalszej części pętli (jeśli by coś miało być) zmienna i będzie miała poprawną wartość. Można to zobaczyć:
https://ideone.com/CDviRx
oraz
https://ideone.com/3QY68G

1 użytkowników online, w tym zalogowanych: 0, gości: 1