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

Bankomat. Pętla while nie kończy się po spełnieniu warunku.

42 Warsaw Coding Academy
+1 głos
1,167 wizyt
pytanie zadane 16 października 2018 w C i C++ przez Drax Użytkownik (630 p.)

Witam! Umieściłem w pętli "While" dwa warunki. Po spełnieniu jednego z nich pętla przestaje działać natomiast po spełnieniu drugiego mimo, że powinna to jednak nadal działa. Jeżeli istnieje możliwość proszę o sprawdzenie kodu i jakies porady.


#include <iostream>

using namespace std;

string PIN;
int d=3;

int main()
{
while((d>0)||(PIN=="1234"))
{
d=d-1;
cout<< "Podaj PIN: ";
cin>>PIN;

if(PIN=="1234")

{
    cout<<endl<<"Podano prawidlowy PIN"<<endl;
}

else if(PIN!="1234")

{
   cout<<"Podano nieprawidlowy PIN. Pozostalo "<<d<<" prob"<<endl;
}

}
    return 0;
}

 

komentarz 17 października 2018 przez qqq Nowicjusz (140 p.)

Siemka! Też zacząłem kurs C++ i przeglądając forum wpadłem na Twój wpis. Zainspirował mnie on do poćwiczenia pętli z elementami, które Ty uwzględniłeś w swoim kodzie. Ja rozwiązałem to tak: 

string PIN;
string PINlog = "1234";

main()
{
    cout << "Podaj PIN: ";
    cin >> PIN;

    for (int i = 3; i >= 0; i--)
    {
        if (PIN != PINlog)
        {
            cout << "Pin niepoprawny. Ponow probe." << endl;
            cout << "Pozostala liczba prob: " << i << endl;
            cin >> PIN;
        }
        else
        {
            cout << "Pin poprawny.";
            break;
        }
    }
    return 0;
}

Dzięki za pomysł! 

komentarz 17 października 2018 przez Drax Użytkownik (630 p.)

Cześć! Ja po uzyskaniu pomocy i naprawieniu swojego kodu rozwiązałem ten problem. Podsyłam Ci mój pomysł.

#include <iostream>

using namespace std;

string PIN;
int iloscprob=3;

int main()
{
while((iloscprob>0)&&(PIN!="1234"))
{
iloscprob=iloscprob-1;
cout<< "Podaj PIN: ";
cin>>PIN;

if(PIN=="1234")

{
    cout<<endl<<"Podano prawidlowy PIN"<<endl;
}

else if(PIN!="1234")

{
   cout<<"Podano nieprawidlowy PIN. Pozostalo "<<iloscprob<<" prob"<<endl;
}

}
    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 17 października 2018 przez bilaw Bywalec (2,890 p.)
wybrane 17 października 2018 przez Drax
 
Najlepsza

Cześć, nie zmieniając znacząco Twojego kodu spróbuj wpisać:

while((d>0)&&(PIN!="1234"))

Dopóki PIN jest różny niż "1234" i D jest większe od zera to wykonuj pętlę.
U mnie działa :)
Dlaczego PIN dajesz jako string? 

komentarz 17 października 2018 przez Drax Użytkownik (630 p.)
edycja 17 października 2018 przez Drax
Użyłem funkcji string aby można było wprowadzać PIN zaczynający się od cyfry 0. Sprawdziłem twój kod, wszystko działa jak należy. Bardzo dziękuje i pozdrawiam.

 

P.S. Mógłbyś mi tylko wytłumaczyć dlaczego używamy znaku matematycznego "i" ,a nie "lub".
komentarz 17 października 2018 przez bilaw Bywalec (2,890 p.)
U Ciebie w pętli While zadziałało to tak:
Dopóki "to" i "to" jest spełnione to wykonuj instrukcje w pętli.
While ((d>0) &&(PIN!="1234")) oba są spełnione to pętla będzie działać.
0 głosów
odpowiedź 16 października 2018 przez WireNess Stary wyjadacz (11,240 p.)

A myślałeś nad przerwaniem pętli za pomocą break; w momencie gdy użytkownik wpisze prawidłowy PIN? Dodatkowo to d jest mało intyicyjną nazwą ;D

#include <iostream>
 
using namespace std;
 
int main()
{
	int iloscProb = 1;
	string PIN;
	bool PIN_ok = false;
	
	do {
		cout << "Podaj PIN: ";
		cin >> PIN;
		
		if(PIN == "1234") {
			PIN_ok = true;
			break;
		}
		else {
			++iloscProb;
		}
		
	} while(iloscProb <= 3)
		
	if(PIN_ok) {
		//tutaj kwestie dla poprawnego PIN'u czyli np: wybor wyplata gotowki, saldo itp.
	}
	else {
		//Co ma sie stac gdy wpisalismy zly pin lub petla dobiegla konca
	}
	
    return 0;
}

Pozwoliłem sobie zmienić ten program (może trochę znacząco, ale wydaje mi się, że spełni twoje oczekiwania. W razie pytań pisz :)

Podobne pytania

0 głosów
0 odpowiedzi 1,799 wizyt
0 głosów
1 odpowiedź 890 wizyt
pytanie zadane 4 listopada 2018 w C i C++ przez Szarp Początkujący (270 p.)
0 głosów
2 odpowiedzi 914 wizyt
pytanie zadane 17 grudnia 2015 w C i C++ przez varazand Początkujący (320 p.)

93,395 zapytań

142,389 odpowiedzi

322,567 komentarzy

62,753 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...