您需要在Windows中使用控制檯API。以下是禁用控制檯窗口中的回顯的代碼片段。功能SetConsoleMode()
用於控制回聲(除其他外)。我保存舊模式,以便一旦檢索到密碼,我就可以恢復控制檯。
而且,*ConsoleMode()
函數需要控制檯輸入緩衝區的句柄。如何獲得這些緩衝區的句柄在CreateFile()
的MSDN文檔中有描述。
int main(int argc, char* argv[])
{
char password[100] = { 0 };
printf("Enter your password: ");
HANDLE hConsole = ::CreateFile("CONIN$", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
DWORD dwOldMode;
::GetConsoleMode(hConsole, &dwOldMode);
::SetConsoleMode(hConsole, dwOldMode & ~ENABLE_ECHO_INPUT);
bool bFinished = false;
while(!bFinished) {
if(!fgets(password, sizeof(password)/sizeof(password[0]) - 1, stdin)) {
printf("\nEOF - exiting\n");
} else
bFinished = true;
}
::SetConsoleMode(hConsole, dwOldMode | ENABLE_ECHO_INPUT);
printf("\nPassword is: %s\n", password);
return 0;
}
你用用C'getch' ++,而不是'cin.get'有什麼特別的原因嗎? – 2010-12-21 06:51:23
沒理由。找不到其他合適的方法。 – 2010-12-21 07:02:44
@Cody:getch不會回顯輸入,不像典型的cin.get() – ybungalobill 2010-12-21 07:11:57