2010-08-30 2 views
3

Можно создать дубликат:
Read a password from std::cinНевидимый ввод для паролей?

Я хочу CIN >> вход, но когда они вводят что-то я не хочу, чтобы это было видно им. Например, когда вы используете passwd в unix, чтобы изменить свой пароль, когда он не показывает, что вы набрали. Я надеюсь, что это понятно, о чем я прошу. Заранее спасибо.

+0

Звучит как конфигурация консоли. – Leonid

+3

Дубликат http: // stackoverflow.com/questions/1413445/read-a-password-from-stdcin – tcrosley

+0

Не могли бы использовать ncurses? Я знаю, что это не стандартная библиотека C++, но это может быть именно то, что требуется OP. Быстрый поиск показывает, что использование ncurses также может быть переносимым для Windows, если используется cygwin или pcurses. –

ответ

1

Если вы хотите что-то вроде того, что вы делаете, когда вводите пароль для входа в окно linux, это поведение не может быть достигнуто на C или C++. Для этого вам нужно будет использовать библиотеку определенной платформы. Более конкретно, консольный ввод в C и C++ всегда повторяется на консоли.

2

cin Это не способ сделать это, так как ОС (обычно) выполняет эхо стандартного ввода. Что вам нужно сделать, это обработать ключевые события на уровне ОС.

6

От C++ FAQ Lite

Это не является стандартной функцией C++ - C++ даже не требует системы, чтобы иметь клавиатуру или экран. Это означает, что каждая операционная система и поставщик делают это несколько иначе. Для получения подробной информации о конкретной установке, пожалуйста, ознакомьтесь с документацией, прилагаемой к вашему компилятору.
+5

RTFM - лучший ответ? В самом деле? – indiv

+0

@indiv - часто раз, да. –

2

Для Unix-подобных систем есть getpass(3), которые будут делать то, что вы хотите.

Однако

  1. Это не портативный (только системы Unix).
  2. Это устаревшее («Присутствует в SUSv2, но отмечено LEGACY. Удалено в POSIX.1-2001.»).

Нет никакого способа сделать это со стандартными C или C++.

0

Обнаружили ли они нажатия клавиш. Подумайте об этом так: когда пользователь нажимает клавишу «A» в видеоигре, программа запускает код; не думайте об этом как о получении ввода. Подумайте об этом как об обнаружении нажатий клавиш и добавлении каждого нажатия клавиши к некоторой структуре данных (например, к массиву).

Я знаком с функциональностью в терминале UNIX, о которой вы говорите, и это не позволяет вам вернуться или что-то еще. Если вы хотите эту функциональность, просто сделайте то, что я сказал выше.

Если вы хотите иметь возможность backspace, хотя пользователь не сможет увидеть, что они поддерживают, вы можете написать код, который удаляет последний элемент массива, когда пользователь нажимает на обратное пространство.

Кроме того, все остальные правильны, когда говорят, что вам необходимо запрограммировать это на систему, в которой вы ее используете.

Наконец, это может быть небезопасно, если вы используете это для пароля и просто бросаете его в массив.

Смежные вопросы