KawaiiCreeper Posted May 30, 2014 at 07:42 AM Report #557642 Posted May 30, 2014 at 07:42 AM Boa dia, Ainda sou um newbie em C++ e estava a tentar esconder a password com algum tipo de char (asteriscos, cardinais..) mas não encontro algo que funcione e que tenha uma boa explicação. //Password printf("Introduza a sua password:\n"); fflush(stdin); gets_s(strTemp); strcpy_s(u[r.novoRegistoUser].password, strTemp); Se alguém me pudesse ajudar agradecia 😉
lusitan Posted May 30, 2014 at 08:28 AM Report #557644 Posted May 30, 2014 at 08:28 AM Não sei muito disso mas penso que isso dos asteriscos é mais comum nos browsers e dá enterder que queres fazer isso na linha de comandos. Em linux a solução mais simples passa por aqui: http://www.cyberciti.biz/faq/linux-script-to-prompt-for-password/ Isso faz com que durante a leitura da password não seja mostrado qualquer char no ecrã. Eu começava por fazer um pequeno script em bash para esse efeito tal como indicado no link e o teu programa iria executar esse script. O equivalente em windows não faço ideia... Mas para fazer tudo em C++ espreita aqui: http://www.cplusplus.com/articles/E6vU7k9E/
KawaiiCreeper Posted May 30, 2014 at 08:42 AM Author Report #557649 Posted May 30, 2014 at 08:42 AM Pois, eu estou a trabalhar em Win7, mas quando quiser trabalhar em Linux já sei, mas de qualquer forma obrigado, apenas tenho de pesquisar mais sobre essas duas primeiras livrarias no código que ainda não conheço muito bem, qualquer coisa eu volto a reponder a este tópico.
nelsonr Posted May 30, 2014 at 08:49 AM Report #557652 Posted May 30, 2014 at 08:49 AM Boas, vê estes exemplos: http://www.cplusplus.com/forum/beginner/22576/#msg118294 http://www.cplusplus.com/forum/general/3570/#msg15121
KawaiiCreeper Posted May 30, 2014 at 09:14 AM Author Report #557657 Posted May 30, 2014 at 09:14 AM Boas nelson, tentei deste forma: //Password printf("Introduza a sua password:\n"); fflush(stdin); while ( (strTemp = getch() ) != 13) { u[r.novoRegistoUser].password = strTemp; printf("*"); } Mas dá-me um erro na linha do while, supostamente ele diz que nao consegue converter int para char, quando o strTemp tá declarado como string e um getch é um comando, tenho a livraria conio.h O que poderá estar a causar isto?
nelsonr Posted May 30, 2014 at 09:48 AM Report #557659 Posted May 30, 2014 at 09:48 AM Um exemplo #include <iostream> #include <string.h> #include <conio.h> using namespace std; int main() { string pass = ""; char ch; cout << "Enter pass\n"; ch = _getch(); while(ch != 13) { pass.push_back(ch); cout << '*'; ch = _getch(); } // if(pass.compare("pap")==0) { cout << "\nAccess granted \n"; } else { cout << "\nAccess aborted...\n"; } return 0; } No entanto é apenas um exemplo, isso depois ainda tem algumas verificações extra (tamanho, delete, etc)
KawaiiCreeper Posted May 30, 2014 at 10:04 AM Author Report #557661 Posted May 30, 2014 at 10:04 AM Adaptei o código: //Password printf("Introduza a sua password:\n"); fflush(stdin); //gets_s(strTemp); ch = _getch(); while(ch != 13) { pass[MAXSTRING].push_back(ch); printf("*"); ch = _getch(); } Mas no entanto obti este erro: Error 4 error C2228: left of '.push_back' must have class/struct/union Algo que fiz mal? Consegui resolver outros erros que tinha, apesar deste erro
Rui Carlos Posted June 2, 2014 at 07:59 PM Report #557966 Posted June 2, 2014 at 07:59 PM Não deveria ser pass.push_back(ch);? Qual é o tipo de pass? Rui Carlos Gonçalves
KawaiiCreeper Posted June 3, 2014 at 04:48 PM Author Report #558099 Posted June 3, 2014 at 04:48 PM (edited) Não deveria ser pass.push_back(ch);? Qual é o tipo de pass? É uma string temporária, que depois irá ser copiada para um objeto de uma estrutura Edited June 3, 2014 at 04:49 PM by KawaiiCreeper
Rui Carlos Posted June 3, 2014 at 07:19 PM Report #558117 Posted June 3, 2014 at 07:19 PM Nesse caso em princípio o erro é aquilo que referi na mensagem anterior. Rui Carlos Gonçalves
KawaiiCreeper Posted June 4, 2014 at 02:25 PM Author Report #558206 Posted June 4, 2014 at 02:25 PM (edited) Então o pass não pode ser uma string? Edited June 4, 2014 at 02:27 PM by KawaiiCreeper
nelsonr Posted June 4, 2014 at 02:26 PM Report #558207 Posted June 4, 2014 at 02:26 PM Porque é que alteraste de pass.push_back(ch); para pass[MAXSTRING].push_back(ch); ?
KawaiiCreeper Posted June 4, 2014 at 03:26 PM Author Report #558221 Posted June 4, 2014 at 03:26 PM Porque é que alteraste de pass.push_back(ch); para pass[MAXSTRING].push_back(ch); ? Não preciso de meter o tamanho? Nunca usei esta função, my bad >.<
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now