Чтение пароля от станд.:: cin

SELECT MIN(`field`)
FROM `tbl`;

Просто, потому что это - совместимый ANSI. Предел 1 является особым к MySql, как TOP к SQL Server.

53
задан 4 revs, 2 users 91% 3 October 2016 в 07:49
поделиться

4 ответа

Ответ @ wrang-wrang был действительно хорош, но не удовлетворил мои потребности. Вот как выглядит мой окончательный код (который был основан на this ):

#ifdef WIN32
#include <windows.h>
#else
#include <termios.h>
#include <unistd.h>
#endif

void SetStdinEcho(bool enable = true)
{
#ifdef WIN32
    HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); 
    DWORD mode;
    GetConsoleMode(hStdin, &mode);

    if( !enable )
        mode &= ~ENABLE_ECHO_INPUT;
    else
        mode |= ENABLE_ECHO_INPUT;

    SetConsoleMode(hStdin, mode );

#else
    struct termios tty;
    tcgetattr(STDIN_FILENO, &tty);
    if( !enable )
        tty.c_lflag &= ~ECHO;
    else
        tty.c_lflag |= ECHO;

    (void) tcsetattr(STDIN_FILENO, TCSANOW, &tty);
#endif
}

Пример использования:

#include <iostream>
#include <string>

int main()
{
    SetStdinEcho(false);

    std::string password;
    std::cin >> password;

    SetStdinEcho(true);

    std::cout << password << std::endl;

    return 0;
}
64
ответ дан 7 November 2019 в 08:45
поделиться

В стандарте для этого нет ничего.

В unix вы можете записать несколько магических байтов в зависимости от типа терминала.

Используйте getpasswd , если он доступен .

Вы можете system () / usr / bin / stty -echo , чтобы отключить эхо, и / usr / bin / stty echo , чтобы включить его (опять же, в unix) .

Этот парень объясняет , как это сделать без использования stty; Сам не пробовал.

11
ответ дан 7 November 2019 в 08:45
поделиться

Если вас не волнует переносимость, вы можете использовать _getch () в VC .

#include <iostream>
#include <string>
#include <conio.h>

int main()
{
    std::string password;
    char ch;
    const char ENTER = 13;

    std::cout << "enter the password: ";

    while((ch = _getch()) != ENTER)
    {
        password += ch;
        std::cout << '*';
    }
}

Также есть getwch () для широких символов . Я советую вам использовать NCurse , который также доступен в системах * nix .

7
ответ дан 7 November 2019 в 08:45
поделиться

Только представьте, что у меня есть, вы можете прочитать символ пароля по символу, а после этого просто напечатать backspace ("\ b") и, возможно, '*'.

2
ответ дан 7 November 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: