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

Program nie wchodzi w pętle przy takich "samych" warunkach

Object Storage Arubacloud
0 głosów
310 wizyt
pytanie zadane 11 października 2021 w C i C++ przez Andrzej_Olsz Nowicjusz (210 p.)
Witam. Mam pytanie dlaczego program nie wchodzi w pętle w przypadku:

#include <iostream>

using namespace std;

float ocena, srednia, suma;
string odpowiedz;
int i;

int main()
{
    while (odpowiedz=="Nie")
    {cout << "Podaj ocene" << endl;
    cin>>ocena;
    cout << "Czy to twoja ostatnia ocena?"<<endl;
    cin >>odpowiedz;
    suma=suma+ocena;
    //cout <<suma<<endl;
     //i++;
    // cout <<"i= "<<i<<endl;
    }
    srednia=suma/i++;
    cout<<"Twoja srednia to: "<<srednia;

    return 0;
}
A w przypadku:

#include <iostream>

using namespace std;

float ocena, srednia, suma;
string odpowiedz;
int i;

int main()
{
    while (odpowiedz!="Tak")
    {cout << "Podaj ocene" << endl;
    cin>>ocena;
    cout << "Czy to twoja ostatnia ocena?"<<endl;
    cin >>odpowiedz;
    suma=suma+ocena;
    //cout <<suma<<endl;
     //i++;
    // cout <<"i= "<<i<<endl;
    }
    srednia=suma/i++;
    cout<<"Twoja srednia to: "<<srednia;

    return 0;
}
Chodzi o warunek w pętli while.

Pzdr
1
komentarz 11 października 2021 przez Wiciorny Ekspert (270,190 p.)
sformatuj kod do bloczków dostępnych w edycji zadawania pytania

3 odpowiedzi

0 głosów
odpowiedź 11 października 2021 przez tkz Nałogowiec (42,000 p.)
Bo nie inicjalizujesz napisu. Więc oczywistym jest, że będzie różny od czegokolwiek.
komentarz 12 października 2021 przez Andrzej_Olsz Nowicjusz (210 p.)
Dzięki za odpowiedz.

Pzdr
0 głosów
odpowiedź 11 października 2021 przez draghan VIP (106,230 p.)
Ponieważ w pierwszym i drugim przykładzie konstrukcja warunku jest inna.

Na początku programu, zanim sprawdzony zostanie warunek przed pierwszą iteracją pętli, zmienna `odpowiedz` będzie zainicjalizowana domyślną wartością - będzie to pusty string.

Zatem pierwszy przykład, rozłożony na język polski, będzie wyglądał tak:

"jeśli `odpowiedz`  == "Nie", wykonaj kolejną (pierwszą) iterację". Ten warunek jest fałszywy - `odpowiedz` nie jest równa "Nie", bo string jest pusty na tym etapie.

Drugi przykład:

"jeśli `odpowiedz`  != "Tak", wykonaj kolejną (pierwszą) iterację". Ten warunek jest prawdziwy - pusty string nie jest tym samym co "Tak".
komentarz 12 października 2021 przez Andrzej_Olsz Nowicjusz (210 p.)
Dzięki za wyjaśnienie.

Pzdr
komentarz 12 października 2021 przez VBService Ekspert (253,340 p.)

BTW. według opisu @draghan, ponieważ zmienna odpowiedz jest tylko zainicjowana bez wartości (czyli nie zawiera żadnego tekstu), to przy takim zapisie zadziałają obydwie

    while (odpowiedz != "Nie")
    {
        ...
    }
    while (odpowiedz != "Tak")
    {
        ...
    }

 

#include <iostream>
using namespace std;

int main(){

    string odpowiedz;


    while (odpowiedz != "Nie")
    {
        odpowiedz = "Nie";
        cout << odpowiedz << endl;
    }
    while (odpowiedz != "Tak")
    {
        odpowiedz = "Tak";
        cout << odpowiedz << endl;
    }

    return 0;
}

 

0 głosów
odpowiedź 12 października 2021 przez Andrzej_Olsz Nowicjusz (210 p.)
Dzięki za odpowiedz.

Pzdr

Podobne pytania

0 głosów
1 odpowiedź 466 wizyt
0 głosów
1 odpowiedź 663 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...