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

Pętla while warunek, a nawias klamrowy

Object Storage Arubacloud
0 głosów
233 wizyt
pytanie zadane 6 lutego 2019 w C i C++ przez Thanat0s666 Nowicjusz (230 p.)
edycja 6 lutego 2019 przez Thanat0s666

Witam mam problem z logicznym zrozumieniem pętli while - do tej pory rozumiałem ją tak, że to co stało po while(TUTAJ#1) w nawiasach okrągłych było warunkiem, a to co stało {TUTAJ#2} w nawisach klamrowych wykonywało się dopóki warunek w nawiasach okrągłych był prawdziwy. I tak na przykład fragment kodu:
"int n=5; 
while(n<=10) {n++;}" wykona się 5 razy zanim warunek przestanie być prawdziwy i while się zerwie.
Natomiast w programie wykorzystującym funkcję getline();  w nawiasach okrągłych występuje funkcja, która jest prawdziwa dopóki są linie w pliku tekstowym. Natomiast DODATKOWO sam getline();  jest wykonywany, bo w każdej iteracji jest wczytywana na nim kolejna linia MIMO to, że jest on tylko warunkiem i nie znajduje się między nawiasami Klamrowymi. Jak to jest możliwe?

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;
int rok;
string kraj,miasto;
fstream dane;
string roks;

int main()
{
    {
    dane.open("dane.txt", ios::in);
        if(dane.good()==true) 
        {
            cout << "SDane wejscia sprawne";
        }
        else 
        {
            cout << "Blad danych wejscia";
        }

    int linia=1;
    string ram;

    while(getline(dane,ram)) 
    {
        switch(linia) 
        {
            case 1: 
        {
        roks = ram;
        rok=atoi(roks.c_str());
        }
        break;
    
        case 2: 
        {
        kraj = ram;
        }
        break;
        
        case 3: 
        {
        miasto=ram;
        }
        break;
        }
       linia++;
    }//while

    dane.close();
    cout << rok << endl;
    cout << kraj << endl;
    cout << miasto << endl;
    return 0;
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 6 lutego 2019 przez criss Mędrzec (172,590 p.)

Natomiast w programie wykorzystującym funkcję getline();  w nawiasach okrągłych występuje funkcja, która jest prawdziwa dopóki są linie w pliku tekstowym.

Ok, ale w czym problem?

 Natomiast DODATKOWO sam getline();  jest wykonywany, bo w każdej iteracji jest wczytywana na nim kolejna linia MIMO to, że jest on tylko warunkiem i nie znajduje się między nawiasami Klamrowymi. Jak to jest możliwe?

No ale wartość warunku musi zostać ustalona. To też się wykonuje. `n <= 10` też się wykonuje. Warunek nie okazuje się prawdziwy lub fałszywy z kosmosu. To się wykonuje. Coś musi być wynikiem wyrażenia w nawiasach okrągłych. Wtedy wynik jest konwertowany na typ bool i to jest true albo false. I wtedy można określić czy pętla ma lecieć dalej czy zakończyć. Szczerze to nie wiem jak inaczej to sobie wyobrażałeś, no ale wyrażenie w nawiasach okrągłych też musi zostać wykonane, żeby poznać jego wartość. 

komentarz 7 lutego 2019 przez Thanat0s666 Nowicjusz (230 p.)
Rozumiem, poprostu wcześniej myślałem że najpierw gdzieś na zewnątrz sprawdzany jest warunek I dopiero od wartosci jego stanu logicznego są/lub nie są wykonywane instrukcje myślałem że warunek jest jak by liczony na innych zasadach niż to co w klamrach A jego udział kończy się tylko na  sprawdzeniu jego stanu logicznego, teraz już wiem że tak naprawdę jeśli jego stan logiczny jest true to w pewnym sensie będzie on też pierwszą wykonaną komendą

 

Dziękuję

Podobne pytania

0 głosów
0 odpowiedzi 193 wizyt
pytanie zadane 17 lutego 2021 w JavaScript przez Freez3 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 6 grudnia 2015 w C i C++ przez Kamil1234 Użytkownik (650 p.)
0 głosów
2 odpowiedzi 1,704 wizyt
pytanie zadane 10 kwietnia 2019 w C i C++ przez cyrus33 Użytkownik (680 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 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!

...