• 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

0 głosów
658 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 (282,350 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,040 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 (256,600 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ź 1,555 wizyt
0 głosów
1 odpowiedź 961 wizyt

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 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

Kursy INF.02 i INF.03
...