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

Problem z warunkiem petli while.

VPS Starter Arubacloud
0 głosów
203 wizyt
pytanie zadane 14 kwietnia 2022 w C i C++ przez michal.em Nowicjusz (120 p.)

Witam zaznaczam ze jestem poczatkujacysmiley

Mam problem w prostym symulatorem bankomatu, mimo wpisania 3 krotnie poprawnego pinu, nie nastepuje zerwanie petli i przejscie do menu bankomatu, fragmet dotyczacy zadeklarowanego pinu wyswietlilem pogladowo,

z gory dziekujeza pomoc.

#incude <iostream>
#include <fstream>
#include <cstdlib>
#include <iomanip>


using namespace std;


string nazwisko, nr_karty;
string pin;
int  saldo;


int main()
{
    cout << "witamy w naszym banku " << endl;

fstream plik;
    plik.open("dane.txt", ios::in | ios::binary );

    if(plik.good()==false)
    {
        cout<<"Bledne dane uzytkowanika.";
        exit(0);
    }

    int nr_linii=1;
    string linia;

        while(getline(plik,linia))
        {
            switch(nr_linii)
            {
                case 1: nazwisko = linia; break;
                case 2: nr_karty = linia; break;
                case 3: pin      = linia; break;
                case 4: saldo    = atof(linia.c_str()); break;
            }
            nr_linii++;
        }


    plik.close();



                cout<< "Panie: " << nazwisko << endl;
                cout << "to zadeklarowany pin" << pin << endl;



    string wpin;
    int Mprob = 3;
    int prob = 1;
    bool OutOfPin = false;
    bool warning = false;



    while (pin != wpin && !OutOfPin)
    {
        if (prob < Mprob)
            {
                cout << "wprowadz pin"<< endl; cin >> wpin;
                prob++;

                if (prob == 3)
                {
                    warning = true;
                }
                    if (warning)
                    {
                        cout << "ostroznie ostania pruba wpisania pinu"<< endl; cin >> wpin;

                    }

            }


        else
        {
            OutOfPin = true;
        }

    }

    if (OutOfPin)
    {
        cout << "wprowadzono zly pin nastapi blokada karty"<< endl;

    }

    else
    {
        cout << "wybierz operacje"<< endl;
    }

    cout << "sprawdz saldo " <<  "1."<< endl;

    cout << "wyplata srodkow " <<  "2."<< endl;

    cout << "wplata srodkow " << "3."<< endl;







cout << "to zadeklarowany  pin " << pin << endl;















return 0;
}
l

 

komentarz 15 kwietnia 2022 przez Oscar Nałogowiec (29,290 p.)
Musisz przynajmniej raz zapytać o pin, więc bardziej właściwa będzie pętla do-while.

Pin z pliku czytasz poprzez getline, a z klawiatury poprzez << - mogą być różnice w  'białych' znakach. Może wypisz długość obu napisów.
komentarz 16 kwietnia 2022 przez michal.em Nowicjusz (120 p.)

int dlugosc = pin.length();

zwrocilo  w rezultacie 5, gdzie (pin 0123 ) ma 4, rzeczywiscie  wczytalo spacje wink

Pozostaje zapytac jak radzic sobie z tym zagadnienem aby getline nie wczytywal bialych znakow?   dodam ze w pliku tekstowym nie bylo zadnej spacji.

 

 

komentarz 16 kwietnia 2022 przez Oscar Nałogowiec (29,290 p.)

W sumie to nie wiadomo, czy była to spacja.

Najlepiej jest użyć operatora <<, jednak nie bezpośrednio na pliku, a na stringu zawierającym odczytaną linie. Wtedy zachowanie będzie dokładnie takie samo.

Trochę to strzelanie z armaty do wróbla.smiley

Nie można wczytywać, bezpośrednio ze string, ale jest wariant klasy stream, która nie działa na plikach na dysku a na stringach w pamięci.

#include <sstream>      // std::istringstream

/// a potem w kodzie

                case 3: 
                  {
                      istringstream lis(linia);
                      lis >> pin;
                  }
                  break;

 

komentarz 21 kwietnia 2022 przez michal.em Nowicjusz (120 p.)

dziekuje. dziala bez zarzutu yes

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+2 głosów
4 odpowiedzi 429 wizyt
0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 31 maja 2017 w PHP przez Amiga4ever Użytkownik (570 p.)
0 głosów
2 odpowiedzi 379 wizyt

92,452 zapytań

141,262 odpowiedzi

319,080 komentarzy

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

...