PDA

View Full Version : [C++]login


dennis8787
11-06-2011, 00:58
Devo realizzare una funzione che mi effettua una specie di login, nel senso, che io ho un file di testo fatto cosi:
USERNAME PASSWORD
USERNAME1 PASSWORD1

il programma mi deve chiedere di inserire username e password, poi ci deve essere un controllo se i valori che ho inserito corrispondano a quelli presenti dentro al fine, nel senso che se io inserisco username e password, posso accedere a delle funzioni, mentre se inserisco username e password2 mi deve ritornare un errore del tipo, "Dati sbagliati, riprovare". So come si effettua una lettura di un file e una scrittura, mi potete dare una mano?
Piu o meno mi viene in mente questo ma sara sbagliato di sicuro...#include<iostream>
#include<fstream>
int main(){
fstream file;
file.open("nomefile.txt")
cout << "inserisci user: ";
cin >> user;
while(!file.eof()){
if(strcmp(user, qualcosa che non so))
return true;
else
return false;
}
}
}

tuccio`
11-06-2011, 13:34
// Leggi la riga USERNAME PASS
string line;
getline(file, line);

// Cerchi uno spazio nella linea
size_t index = line.find_first_of(" ");

// Se c'è, puoi ricavarti username e pass
// eventualmente puoi controllare che ce ne sia uno solo etc
if (index != string::npos)
{

string username = line.substr(0, index);
string password = line.substr(index + 1);

// ora puoi fare il controllo con l'input

}

dennis8787
11-06-2011, 15:04
sinceramente non ho capito il tuo ragionamento

tuccio`
11-06-2011, 15:23
è la cosa più banale che puoi pensare: leggi la linea del file e la dividi nella parte prima dello spazio e in quella dopo, per avere user e pass letti dal file, poi vedi se è uguale a quello che hai inserito

dennis8787
11-06-2011, 18:44
si quello lo avevo capito, ma non capisco il codice che hai scritto...

tomminno
12-06-2011, 12:08
si quello lo avevo capito, ma non capisco il codice che hai scritto...

Mi sembra che il codice utilizzi metodi abbastanza autoesplicativi.
getline: legge una linea da uno stream
find_first_of: trova la prima occorrenza di qualcosa
string::npos: ultima posizione in una stringa
substr: prende la sottostringa specificata