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

Błąd w zapisie danych logowania do pliku

VPS Starter Arubacloud
0 głosów
447 wizyt
pytanie zadane 27 czerwca 2022 w C i C++ przez sushi2021 Nowicjusz (160 p.)

Witam. Stworzyłem prosty program z menu 2 użytkowników. Po zalogowania któregokolwiek użytkownika program powinien zapisać dane logowania do pliku (login i hasło). Zapisuje tylko login, hasła nie chce zapisać. Wiem, że gdzieś jest błąd, ale nie umiem sobie z tym poradzić. Proszę o pomoc. 

// Midas.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
//

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <conio.h>
#include <string>
//#include <Windows.h>
//#include <cstdio>
//#include <string>

using namespace std;

int main()
{
    cout << "******************** Ussers: ******************** " << endl;
    cout << "********** 1 - Administrator ******************** " << endl;
    cout << "********** 2 - Inny uzytkownik ****************** " << endl;
    cout << "********** 3 - Exit ***************************** " << endl;
    cout << "************************************************* " << endl;
    cout << endl;

    string login_admin = "admin", login_usser = "usser";
    string passwd_admin, passwd_usser;
    string correct_passwd_admin = "test123", correct_passwd_usser = "pass123";

    int ilosc_logowan = 0;
    int menu;
    cin >> menu;

    ilosc_logowan++; //licznik logowan

    //ukrycie hasla pod gwiazdkami
    constexpr char c_enter = 13;
    constexpr char c_backspace = 8;

    char input_character;

    if ((login_admin == "admin") || (login_usser == "usser"))
    {
        cout << "Podaj haslo: " << endl;
    }
   
    input_character = _getch();

    while (input_character != c_enter)
    {

        if (input_character == c_backspace && correct_passwd_admin.size() || correct_passwd_usser.size())
        {
            cout << "\b \b";
            correct_passwd_admin.pop_back();
            correct_passwd_usser.pop_back();
        }
        else if (input_character != c_backspace)
        {
            cout.put('*');
            correct_passwd_admin += input_character;
            correct_passwd_usser += input_character;
        }

        input_character = _getch();
    }
    
    switch (menu)
    {
        case 1:
        {
            cout << "Podaj login administratora: " << endl;
            cin >> login_admin;
            //cout << "Podaj haslo administratora: " << endl;
            //cin >> passwd_admin;

            if ((login_admin == "admin") && (passwd_admin == correct_passwd_admin)) //sprawdzanie poprawnosci loginu i hasla uzytkownika - "admin"
            {
                cout << endl;
                cout << "Przyznany dostep. " << endl;
                cout << "Zalogowales sie za: " << ilosc_logowan << " razem. " << endl;
                cout << endl;
                            }
            else
            {
                cout << endl;
                cout << "Wprowadz poprawne dane logowania uzytkownika: Administrator." << endl;
            }

            //zapis do pliku uzytkownika -"admin"
            fstream plik_admin; //zmienna plikowa potrzebna dla kompilkatora
            plik_admin.open("log_admin.txt", ios::out | ios::app); //otwarcie pliku i zapis do niego, jezeli pliku nie bylo to zostanie stworzony
            plik_admin << login_admin << endl; //zapisz login
            plik_admin << passwd_admin << endl; //zapisz pass
            plik_admin.close(); //zamykanie otwrtego pliku  
            break;
        }
        case 2:
        {
            cout << "Podaj login uzytkownika: " << endl;
            cin >> login_usser;
            //cout << "Podaj haslo uzytkownika: " << endl;
            //cin >> passwd_user;

            if ((login_usser == "usser") && (passwd_usser == correct_passwd_usser)) //sprawdzanie poprawnosci loginu i hasla uzytkownika - "user"
            {
                cout << endl;
                cout << "Przyznany dostep. " << endl;
                cout << "Zalogowales sie za: " << ilosc_logowan << " razem. " << endl;
                cout << endl;
            }
            else
            {
                cout << endl;
                cout << "Wprowadz poprawne dane logowania: Inny uzytkownik. " << endl;
            }

            //zapis do pliku uzytkownika -"user"
            fstream plik_usser; //zmienna plikowa potrzebna dla kompilkatora
            plik_usser.open("log_user.txt", ios::out | ios::app); //otwarcie pliku i zapis do niego, jezeli pliku nie bylo to zostanie stworzony
            plik_usser << login_usser << endl; //zapisz login
            plik_usser << correct_passwd_usser << endl; //zapisz pass
            plik_usser.close(); //zamykanie otwrtego pliku
            break;
        }
            case 3:
            {
                cout << "Exit " << endl;
                break;
            }
            default:
            {
                cout << "Nie ma takiej opcji wyboru. " << endl;
                break;
            }
    }

    system("pause");
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 28 czerwca 2022 przez krystianfr Nowicjusz (240 p.)
W programie hasło nie zostanie zapisanie do pliku jeśli nie wyślesz go do strumienia. Wysyłasz pusty string ponieważ wczytanie danych ze strumienia CIN masz w wzięte w komentarz.

Podobne pytania

0 głosów
2 odpowiedzi 290 wizyt
pytanie zadane 10 listopada 2015 w C i C++ przez Evelek Nałogowiec (28,960 p.)
0 głosów
1 odpowiedź 2,012 wizyt
pytanie zadane 23 listopada 2018 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
2 odpowiedzi 1,543 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

92,851 zapytań

141,792 odpowiedzi

320,879 komentarzy

62,183 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!

...