Inkrementacja licznika w cout'cie

Inkrementacja licznika w cout'cie
HE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

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

Kopiuj
 #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;
} 
Kopiuj
 #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ź

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

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

NA
  • Rejestracja: dni
  • Ostatnio: dni
0

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

HE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
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 :)

MY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1107
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.