Ciao ragazzi, sto avendo problemi con una funzione per il login..
In pratica questa vede se esiste un file contenente i dati di login, se non esiste lo crea e va a scrivere i dati presi in input;
altrimenti, se è esiste il file, vengono richiesti i dati di accesso.
Adesso vi spiego il problema, se inserisco i dati correttamente, la funzione ritorna true, dovrebbe tornare nel main e terminare... invece mi genera un'eccezione e non capisco il perchè
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct userData // Struct da leggere/scrivere su file login
{
string username; // Nome Utente
string password; // Password
}userLogin;
bool login()
{
system("cls");
fstream loginFile; // Creo un file
loginFile.open("Access.dat", ios::binary | ios::in); // Provo ad aprirlo in lettura
if (!loginFile.is_open()) // Se non esiste
{
cout << "Registrazione\n\n";
loginFile.open("Access.dat", ios::binary | ios::out); // Lo apro in scrittura
cout << "Inserisci Username: ";
getline(cin, userLogin.username); // Input Nome Utente nella Struct
cout << "Inserisci Password: ";
getline(cin, userLogin.password); // Input Password nella Struct
loginFile.write((char*)&userLogin, sizeof(userData)); // Scrivo la struct nel file
loginFile.close(); // Chiudo il file
return false; // Ritorno false, in modo da far eseguire di nuovo la funzione
}
else // Se il file esiste
{
string user; // Nome Utente
string pass; // Password
cout << "Accedi\n\n";
cout << "Inserisci Username: ";
getline(cin, user); // Input Nome Utente
cout << "Inserisci Password: ";
getline(cin, pass); // Input Password
loginFile.read((char*)&userLogin, sizeof(userData)); // Leggo un record dal file
loginFile.close(); // Lo chiudo
if (userLogin.username == user && userLogin.password == pass) // Se i dati presi in input sono uguali a quelli letti dal file
return true; // Ritorna true
}
}
int main()
{
bool check;
do
check = login();
while (!check);
return 0;
}