• 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.

Object Storage Arubacloud
+1 głos
857 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 raddovsky 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,175 wizyt
0 głosów
1 odpowiedź 782 wizyt
pytanie zadane 4 listopada 2018 w C i C++ przez Szarp Początkujący (270 p.)
0 głosów
2 odpowiedzi 690 wizyt
pytanie zadane 17 grudnia 2015 w C i C++ przez varazand Początkujący (320 p.)

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!

...