Dlaczego zmienna ile ma wartość zero??? kod z książki symofnia c++ Grębosza str. 25

0

Witam
Pytanie tak jak w temacie.
i jeśli
= to operator przypisania.
== to operator porównania.
to dlaczego on przerywa pętle mianowicie nie rozumiem pogrubionej linijki.
Proszę o wyrozumiałość gdyż jestem początkującym ;)
A oto kod:

#include <iostream>
int main()
{
int ile;

std::cout << "Ile gwiazdek ma miec kapitan ? : ";
std::cin >> ile;

std::cout << "\n No to narysujmy wszystkie "
				<< ile << " : ";

// pêtla while rysuj¹ca gwiazdki
while(ile)
{
	std::cout << "*";
	**ile = ile - 1;**

}
// na dowód, ¿e mia³ prawo przerwaæ pêtlê
std::cout << "\n Teraz zmienna ile ma wartosc " << ile;

}

2

nie rozumiesz pętli while. Gdy podasz do zmiennej ile np 5 to wypisze Ci 5 gwiazdek a ile na koniec ZAWSZE będzie miało wartość zero. Dlaczego ?
Ponieważ warunek w pętli:
while(ile), jest jakby równoczesnym warunkiem : dopóki ile jest różne od zera.
Czyli dla ile = 5;
while(5) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 4
while(4) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 3
while(3) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 2
while(2) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 1
while(1) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 0
while(0) tutaj już nie rysuje gwizdki, bo wartość ile osiągnęła zero, przerywa pętle.

1

1 i więcej pętla while traktuje jako TRUE (reszta też); a 0 jako FALSE (w sumie tak zawsze jest :D), zmienna jest zdeklarowana przed pętlą i gdy podajesz jej wartość to w pętli linijka ile = ile - 1;
zaczyna sobie odejmować tą wartość
( @Resident "while(5) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 4
while(4) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 3
while(3) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 2
while(2) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 1
while(1) rysuje 1 gwiazdkę, odejmuje od ile jeden, teraz ile = 0
while(0) tutaj już nie rysuje gwizdki, bo wartość ile osiągnęła zero, przerywa pętle. ")
, w przeciwnym razie pętla była by nieskończona, bo by miała warunek zawsze TRUE.
A zmienna ile jest dalej używana w programie, tylko jej wartość się zmniejszyła/zmieniała do 0 na potrzeby przerwania pętli.

0

Dobra już rozumiem, dzięki za pomoc.
A co komentarza to też się z nim zgodzę np. ten kod zrozumiałem od razu.

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