好吧,我看到很多人建议使用非标准的 getch() 或 _getch()。
请不要使用 conio.h 库,因为它不可靠且非标准。MSV C++ 08 中的 conio.h 与 Mingw C 中的有很大不同。
其中许多函数,如 textcolor()、cprintf 等,已被弃用,并且有其他替代方案。
在这里,我将发布一个使用 Win API 的 getch() 替代方案。
哦,它只能在 Windows 上运行……
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
#include <stdio.h>
#include <windows.h>
CHAR GetCh (VOID)
{
HANDLE hStdin = GetStdHandle (STD_INPUT_HANDLE);
INPUT_RECORD irInputRecord;
DWORD dwEventsRead;
CHAR cChar;
while(ReadConsoleInputA (hStdin, &irInputRecord, 1, &dwEventsRead)) /* Read key press */
if (irInputRecord.EventType == KEY_EVENT
&&irInputRecord.Event.KeyEvent.wVirtualKeyCode != VK_SHIFT
&&irInputRecord.Event.KeyEvent.wVirtualKeyCode != VK_MENU
&&irInputRecord.Event.KeyEvent.wVirtualKeyCode != VK_CONTROL)
{
cChar = irInputRecord.Event.KeyEvent.uChar.AsciiChar;
ReadConsoleInputA (hStdin, &irInputRecord , 1, &dwEventsRead); /* Read key release */
return cChar;
}
return EOF;
}
|
上面的代码应该有效,因为它对我有效。
欢迎提出建议和改进。我是这个领域的菜鸟。