• 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
229 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,340 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,340 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 626 wizyt
0 głosów
1 odpowiedź 269 wizyt
pytanie zadane 31 maja 2017 w PHP przez Amiga4ever Użytkownik (570 p.)
0 głosów
2 odpowiedzi 484 wizyt

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...