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

VPS Starter Arubacloud
+1 głos
823 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,140 wizyt
0 głosów
1 odpowiedź 774 wizyt
pytanie zadane 4 listopada 2018 w C i C++ przez Szarp Początkujący (270 p.)
0 głosów
2 odpowiedzi 658 wizyt
pytanie zadane 17 grudnia 2015 w C i C++ przez varazand Początkujący (320 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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!

...