Newsgroup: it.comp.lang.c++
Titolo: Problema

stavo realizzando un programma (ancora in fase iniziale) e ho pensato
di inserire una password per accedere al programma . Il programma
legge la password da un file, legge la password inserita dall'utente e
se le due password corrispondono il programma prosegue, altrimenti
termina. Io ho deciso di realizzare questa parte di verifica della
password in una classe cosicchè da poterla implementare in altri
programmi. Dov'è il problema ?? il problema è tutto nell'if finale che
verifica che le due password siano uguali. Ora vi allego il codice.
char engine::accessositema()
{
	// verifica che la keya inserita corrisponda con quella 
             // del  programma;
	char keya[8]; // dal file
	char inkeya[8]; // dalla tastiera
	// inizia la parte che prende la keya dall'apposito 
             // file "keyaccess.kya"
	fstream f;
	f.open("keyaccess.kya", ios::in); // apre il file
	f.getline(keya, 8); // prende la KeyA
	f.close(); // chiude il file
	// ora prende da tastiera la keya
	cin >> inkeya; // legge la keya dalla tastiera
	if (inkeya == keya) // confronta le due keya
		return 0; // tutto ok
	else if (keya != inkeya)
		return 1; // non va bene
	else 
		return 2; // si sono verificati errori
}
ho provato a fare delle verifiche e ho notato che i duce codici sono
letti correttamente (sia da file che da tastiera) ma il valore di
return è 1. Dove è il problema ?
1000 grazie
credici
cre...@infinito.it


con un paio di modifiche funziona:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int accessosistema();
int main()
{
        int aaa;
        aaa=accessosistema();
        cout << aaa << endl;
}
int accessosistema()
{
string keya;  // molto piů comode degli array di char...
string inkeya;
ifstream f("keyaccess.kya");// ti basta aprirlo in lettura
f >> keya;  // prende la pwd
f.close(); // viene comunque chiuso quando
               // esce dallo scope
cin >> inkeya;
if (inkeya == keya) // confronta le due string
    return 0; // tutto ok
else if (keya != inkeya)
    return 1; // non va bene
else
    return 2; // si sono verificati errori
}
Ok?
Gerolamo


Devi stare attento con i char[] perchè l'operatore == controlla solamente
che i 2 indirizzi di memoria siano uguali, condizione che non è mai
verificata, a meno che tu non abbia assegnato un puntatore all'altro.
Quindi se utilizzi i char[] dovresti controllare ogni elemento dell'array
per sapere se le 2 srtinghe sono uguali.
ciao


wrote:


che i 2 indirizzi di memoria siano uguali, 
Esatto . 
Un'altra possibile soluzione (in stile C ,visto che usi gli array di
char) sarebbe stata :
  if ( strcmpi(inkeya,keya) == 0 )  // Ok le due stringhe sono uguali
Ciao

   if ( strcmpi(inkeya,keya) == 0 )  // Ok le due stringhe sono uguali
Cos'e' "strcmpi"?  Non e' standard, che io sappia, ed i miei
compilatori non la conoscono.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

[...]


 char inkeya[8]; // dalla tastiera
Sono array , quindi quando scrivi:
inkeya == keya
non stai confrontando i due array ma i loro indirizzi!
Questi saranno sempre diversi.
Ecco spiegato il motivo del malfunzionamento.
Se volessi usare gli array di caratteri,
per confrontarli esiste la funzione
strcmp(char*, char*)
che restituisce 0 se le stringhe sono uguali
Quindi se sostituisci la riga incriminata con:
if (!strcmp(inkeya,keya)) // confronta le due keya
tutto comincerà a funzionare.
Comunque ti consiglio l'altro approccio che ti avevo detto.
Gerolamo

		return 2; // si sono verificati errori
L'ultimo else non verra` mai eseguito esso richiede che keya==inkeya,
ma in questo caso sarebbe vera la condizione del primo if (return 0)!
Per quanto riguarda il problema, mi pare ti abbiano gia` risposto.
Paolo
-------------------------------------------
  Paolo Marotta
 
http://web.tiscalinet.it/paolo_marotta/
-------------------------------------------