• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego w do while obiekty zadeklarowane w środku pentli nie są widoczne w miejscu sprawdzania warunku?

Object Storage Arubacloud
0 głosów
157 wizyt
pytanie zadane 2 grudnia 2018 w C i C++ przez vanowikv13 Bywalec (2,740 p.)

Dzień dobry,
Ostatnio zaobserwowałem, że zmienne zadeklarowane między klamrami pętli do ... while nie mogą być użyte dla określenia warunku tej pętli:
Przykładowy kod mojego problemu poniżej:

    do {
        int x;
        cin >> x;
    } while(x != 0);

błąd kompilatora:

error: ‘x’ was not declared in this scope

I stąd moje pytania wiecie może dlaczego to nie działa? Jakie są powody i racje tego? Bo z tego co wnioskuje, kompilator sprawdza czy obiekty wykorzystane w warunku istnieją przed użyciem tej pętli.

Wiem, że jak chcę, żeby zmienna była zniszczona po użyciu pętli jest wiele innych opcji, ale mnie ciekawi dlaczego ta właśnie nie działa.

Pozdrawiam serdecznie i dzięki za wszystkie odpowiedzi.

3 odpowiedzi

+1 głos
odpowiedź 2 grudnia 2018 przez vector Dyskutant (9,200 p.)
wybrane 2 grudnia 2018 przez vanowikv13
 
Najlepsza

[...] wiecie może dlaczego to nie działa? Jakie są powody i racje tego?

Bo standard c++ tego wymaga:

A name declared in a block is local to that block; it has block scope. Its potential scope begins at its point of declaration and ends at the end of its block. A variable declared at block scope is a local variable.

Jak chcesz sobie poczytać więcej to znajdziesz więcej pod paragrafem 6.3.3 standardu N4713

0 głosów
odpowiedź 2 grudnia 2018 przez Adrian1999 Nałogowiec (34,570 p.)
Spróbuj zadeklarować pod sobą jakiegoś dowolnego inta poza pętlą, a za nim drugiego inta tak samo nazwanego... Np napisz po otworzeniu maina int x=10; int x=5;
Pętla powiela to zadanie deklaracji zmiennej, więc to Ci po prostu nie zadziała.
komentarz 2 grudnia 2018 przez vanowikv13 Bywalec (2,740 p.)

Jeżeli dobrze rozumiem co miałeś na myśli, to coś podobnego do tego, na dole. Jest tutaj deklaracja zmiennej i jej inicjalizacja wewnątrz pętli, lecz ten kod działa bez żadnych problemów.

    int i = 5;
    do {
        int x = i + 1;
        cout << x << endl;
        i--;
    } while (i > 0);
0 głosów
odpowiedź 2 grudnia 2018 przez Snejki Stary wyjadacz (14,520 p.)
Warunek w pętli do...while jest sprawdzany poz scope'm(chodzi o nawiasy klamrowe), a deklarację zmiennej masz własnie w scopie.

Aby to zadziałało zadeklararuj zmienna i przed pętlą.

Podobne pytania

0 głosów
1 odpowiedź 137 wizyt
pytanie zadane 20 września 2015 w C i C++ przez tomasztopolewski Początkujący (430 p.)
0 głosów
2 odpowiedzi 343 wizyt
pytanie zadane 23 stycznia 2019 w PHP przez sc4rface Dyskutant (7,710 p.)
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 4 lutego 2016 w C i C++ przez Ditrix Mądrala (5,650 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...