2010-08-30 7 views
3

Possible en double:
Read a password from std::cinEntrée invisible pour les mots de passe?

Je veux cin >> entrée mais quand ils entrée quelque chose que je ne veux pas qu'il soit visible pour eux. Comme lorsque vous utilisez passwd dans unix pour changer votre mot de passe où il ne montre pas ce que vous avez tapé. J'espère que c'est clair ce que je demande. Merci d'avance.

+0

Cela ressemble à une configuration de la console. – Leonid

+3

Duplication de http: // stackoverflow.com/questions/1413445/read-a-password-from-stdcin – tcrosley

+0

Ncurses peut-il être utilisé pour cela? Je sais que ce n'est pas la bibliothèque C++ standard, mais c'est peut-être ce dont le PO a besoin. Une recherche rapide révèle que l'utilisation de ncurses peut également être portable sur Windows si cygwin ou pcurses est utilisé. –

Répondre

1

Si ce que vous voulez ressembler à ce que vous faites lorsque vous entrez le mot de passe pour vous connecter à une machine Linux, ce comportement ne peut pas être obtenu en C ou C++. Vous devrez utiliser une bibliothèque spécifique à la plate-forme pour le faire. Plus spécifiquement, l'entrée de console en C et C++ est toujours répercutée sur la console.

2

cin n'est pas le moyen de le faire, car le système d'exploitation (en général) fait écho à l'entrée standard. Ce que vous devez faire est de gérer les événements clés au niveau du système d'exploitation.

6

De C++ FAQ Lite

Ce n'est pas une caractéristique standard C++ - C++ n'a même pas besoin de votre système d'avoir un clavier ou un écran. Cela signifie que chaque système d'exploitation et fournisseur le fait différemment. Veuillez lire la documentation fournie avec votre compilateur pour plus de détails sur votre installation particulière.
+5

RTFM est la meilleure réponse? Vraiment? – indiv

+0

@indiv - souvent, oui. –

2

Il existe getpass(3) pour les systèmes de type Unix, qui feront ce que vous voulez.

Cependant,

  1. Ce n'est pas portable (systèmes Unix uniquement).
  2. Il est obsolète ("Présent dans SUSv2, mais marqué" LEGACY ", supprimé dans POSIX.1-2001.").

Il n'existe aucun moyen de le faire avec C ou C++ standard.

0

Permet de détecter les pressions sur les touches. Pensez-y de cette façon: Lorsqu'un utilisateur appuie sur la touche «A» dans un jeu vidéo, le programme exécute le code; ne pensez pas à cela comme recevoir des commentaires. Pensez-y comme détecter des frappes et ajouter chaque frappe à une structure de données (par exemple un tableau). Je connais la fonctionnalité du terminal UNIX dont vous parlez et ne vous permet pas de revenir en arrière ou quoi que ce soit d'autre. Si vous voulez cette fonctionnalité, faites ce que j'ai dit plus haut. Si vous voulez pouvoir revenir en arrière, bien que l'utilisateur ne puisse pas voir ce qu'il recule, vous pouvez écrire du code qui supprime le dernier élément du tableau lorsque l'utilisateur clique sur le retour arrière.

En outre, tout le monde a raison de dire que vous devrez programmer ce spécifique au système sur lequel vous l'exécutez. Enfin, cela peut ne pas être sûr si vous utilisez ceci pour un mot de passe et juste le jeter dans un tableau.

Questions connexes