Prosty program pytający o kod – problem z petlą

0

To mój pierwszy post na forum dlatego chciałbym serdecznie powitać wszystkich użytkowników. Od 3 dni hobbystycznie zająłem się c++.Obecnie „bawię się” pętlami. Postanowiłem napisać prościutki program, który będzie prosił o kod dostępu dopóki nie dostanie poprawnego.

Gdy go otrzyma wyświetli napis "kod poprawny!". Moje wypociny poniżej. Nie wiem dlaczego gdy wpisuje poprawny kod=1234 wyświetla mi się napis kod niepoprawny kod poprawny. Warunek w petli while nie jest spełniony, a instrukcja w pętli:

cout<<"kod niepoprawny"<<endl;

jest wykonywana. Pewnie rozwiązanie jest banalne, ale ja już nie mam pomysłu. Z góry dziękuję za pomoc.

IDE Code::Blocks 17.12

#include <iostream>

using namespace std;
int kod;
int main()
{
while(kod!=1234)
    {cout<<"podaj kod:"<<endl;
     cin>>kod;
     cout<<"kod niepoprawny"<<endl;}

    cout<<"kod poprawny";

    return 0;
}
0

Wpisujesz kod i zanim go sprawdzasz wypisujesz wiadomość, że jest niepoprawny a potem sprawdzasz warunek.

0

Da się np. tak:

#include <iostream>
 
using namespace std; // ponoć lepiej tego nie używać

int main() {
int kod = 0; //jak mawiają, zmienne globalne to zło wcielone
while(kod !=1234)  {
     cout<<"podaj kod:"<<endl;
     cin>>kod;
     
    if (kod == 1234) {
      cout<<"kod poprawny";
      break; //przy poprawnym kodzie wyświetla stosowny komunikat i wychodzi z pętli
    }
    cout<<"kod niepoprawny"<<endl;
    }
}
0
#include <iostream>
 
using namespace std;
 
int main() {
int kod=0;
cin>> kod;
  if (kod == 1234) {
      cout<<"kod poprawny";
    }else
    cout<<"kod niepoprawny"<<endl;

while(kod!=1234)  {
     cout<<"podaj kod:"<<endl;
     cin>>kod;
 
    if (kod == 1234) {
      cout<<"kod poprawny";
    }else
    cout<<"kod niepoprawny"<<endl;
 }
}
  1. Na początku warto przyporządkować jakąś wartość kod=0, w przeciwnym razie zostanie tam zapisana jakaś liczba, a tego nie chcemy, bo może się zdarzyć, że będzie to akurat ta liczba która jest w warunku pętli.

  2. Użyłbym do tego pętli raczej do-while (zawsze wykona się chociaż raz).

int main()
{
    int kod=0;
   do{
        cout << "Podaj kod:" << endl;
        cin>> kod;
        if (kod == 1234) {
          cout<<"kod poprawny";
        }else
        cout<<"kod niepoprawny"<<endl;

    }while(kod!=1234);
}
4

Warto zapamiętać 2 rzeczy:

  1. Zmienna lokalna (nie wnikając w definicję wystarczy powiedzieć na tę chwilę, że Twój int kod jest zmienną lokalną) nie ma zdefiniowanej wartości przy tworzeniu. Możesz temu zaradzić ustawiając wartość samodzielnie
int kod = 0;
  1. Odczytanie zmiennej bez zdefiniowanej wartości to tzw. undefined behaviour (w skrócie UB), jeden z najgorszych błędów w programie C++, bo potem program może się zachować w dowolny sposób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1