Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - password con *
Forum - C/C++ - password con *

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
ciao, sempre per il programma di prima, ho un altro problema
quando si inserisce la password, io vorrei che invece che apparissero i caratteri mentre la inserisco, apparissero *****
ho pensato di farlo nel seguente modo:


#include <conio.h>
#include <iostream>
#include <fstream>
using namespace std;


int main()
{
    cout<<"Dimmi la password : ";
    ofstream pass("pass.txt"); //creo un file di testo in cui scrivo la password che mi da l'utente
    char password;
    do
   {
       password=getch(); //prendo la password lettera per lettera
       if(password!='.')
       {
           pass<<password; //scrivo la lettera nel file di testo
           cout<<"*"; //mostro * nel programma
       }
   }
    while (password!='.');// quando inserisco . finisce la password

   pass.close();
   ifstream verifica("pass.txt");
   char str[255];
   verifica.getline(str,255); //leggo dal file di testo creato
   if(str=="mouse") // verifico che la password sia corretta
   {
       cout<<"\npassword corretta"<<endl; // anche se la password è corretta non funziona, perchè?
   }
   else
   {
       cout<<"\npassword errata"<<endl; //appare sempre questo
   }

   remove("pass.txt"); //inserisco il comando per eliminare il file di testo ma non funziona, perchè?
   system("pause");
   return 0;
}

solo che facendo cosi non funziona, mi dice sempre che la password è errata, perchè?
un altro problema è che alla fine non mi elimina il file di testo creato, perchè?
e come faccio per fare in modo che quando termino di inserire la password invece che dover inserire il . posso premere invio?
se lo faccio con string invece che char funziona, solo che mi appaiono i caratteri e non *.
potreste dirmi cosa sono i problemi? grazie

Ultima modifica effettuata da il 02/01/2008 alle 18:22
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 19:06
Mercoledì, 02/01/2008
per il confermare con  l'accapo invece di . devi confrontare con il carattere escape \n, quindi

== '\n'

per il confronto che non va a buon fine char* == char* non fa un confronto di tutta la stringa; per fare ciò o usi la classe string o usi la funzione strcmp che ritorna 0 se uguale -1 se minore 1 se maggiore (mi pare, io di solito uso la classe string che overloada == controlla nella reference se vuoi usare strcmp)

per quanto riguarda il file non eliminato non vedo la chiusura di verifica

Ultima modifica effettuata da netarrow il 02/01/2008 alle 19:09
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:07
Mercoledì, 02/01/2008
grazie mille, ma cosa intendi con chiusura di verifica?

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 21:39
Mercoledì, 02/01/2008
verifica.close()

se il file resta aperto il remove mi sa viene bloccato perchè il file è ancora lockato dal sistema.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:32
Mercoledì, 02/01/2008
grazie, sono riuscito a fare tutto tranne che per '\n'

io ho fatto cosi:

do
   {
       password=getch(); //prendo la password lettera per lettera
       if(password!='\n')
       {
           pass<<password; //scrivo la lettera nel file di testo
           cout<<"*"; //mostro * nel programma
       }
   }
    while (password!='\n');// quando inserisco \n finisce la password

non mi funziona, mi calcola il tasto come se fosse una lettera e continua il ciclo

per fare il confronto string==string ho fatto cosi:

char str[255];
   verifica.getline(str,255); //leggo dal file di testo creato
   string ver; //dichiaro la stringa ver
   ver=str; // eguaglio la string ver al char str

forse non è il modo piu corretto pero funziona, ho fatto cosi perchè non so come si fa a farglielo leggere e metterlo direttamente in un string
ti ringrazio
ciao

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 10:58
Giovedì, 03/01/2008
Testo quotato


while (password!='\n');// quando inserisco \n finisce la password



\n vuol dire a capo, nuova linea; quindi tu premi il tasto [INVIO] convertito in carattere è \n

per leggere direttamente nella stringa fai con getline così:

string ver;
getline(verifica, ver);

Ultima modifica effettuata da netarrow il 03/01/2008 alle 11:00
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 12:31
Giovedì, 03/01/2008
se ho capito bene per fare in modo che quando premo INVIO mi esce dal ciclo devo fare cosi
while(password!='\n')
ho provato ma non mi funziona
cosa saglio?

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 15:28
Giovedì, 03/01/2008
prova a stampare a console il carattere che legge quando premi invio.
Se non è un carattere visualizzabile stampalo castandolo a int e così quandi farai il controllo farai

if((int)password != xy)

dove xy sarà il valore numerico di invio.

PM Quote
Avatar
John (Ex-Member)
Pro


Messaggi: 191
Iscritto: 18/11/2007

Segnala al moderatore
Postato alle 19:24
Giovedì, 03/01/2008
Testo quotato

Postato originariamente da munkaka:

do
   {
       password=getch(); //prendo la password lettera per lettera
       if(password!='\n')
       {
           pass<<password; //scrivo la lettera nel file di testo
           cout<<"*"; //mostro * nel programma
       }
   }
    while (password!='\n');// quando inserisco \n finisce la password





ASD....
Non va
:-?:-?:-?if(password!=='\n'):-?:-?:-?
:D:D:D:D:D:D

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo