• 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

VPS Starter Arubacloud
0 głosów
294 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 (269,120 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 (251,210 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ź 438 wizyt
0 głosów
1 odpowiedź 645 wizyt

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...