我正在嘗試實時讀取控制臺中按下的每個字符。
我正在使用 ReadFile 從 stdin 讀取,但它似乎只在換行后完成讀取操作(當我按 Enter 時)。
這是我的代碼:
char buf[1] = { 0 };
HANDLE stdInHandle = GetStdHandle(STD_INPUT_HANDLE), stdOutHandle = GetStdHandle(STD_OUTPUT_HANDLE);
while (true) {
ReadFile(stdInHandle, buf, sizeof(buf), NULL, NULL);
WriteFile(stdOutHandle, buf, sizeof(buf), NULL, NULL);
}
我將如何讀取實時按下的字符,而不是在換行符之后?
uj5u.com熱心網友回復:
正如我在評論中提到的,您可以SetConsoleMode用來禁用行緩沖:
#include <windows.h>
int main()
{
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
// Get the current console mode
DWORD mode;
GetConsoleMode(hInput, &mode);
// Save the current mode, so we can restore it later
DWORD original_mode = mode;
// Disable the line input mode
mode &= ~ENABLE_LINE_INPUT;
// And set the new mode
SetConsoleMode(hInput, mode);
// Then read and write input...
for (;;)
{
TCHAR buffer[1];
DWORD nread = 0;
// TODO: Need to add some error checking here!
ReadConsole(hInput, buffer, 1, &nread, nullptr);
WriteConsole(hOutput, buffer, nread, nullptr, nullptr);
// Allow some way to exit the program
if (buffer[0] == 'q' || buffer[0] == 'Q')
{
break;
}
}
// Restore the original console mode
SetConsoleMode(hInput, original_mode);
}
uj5u.com熱心網友回復:
函式_getch從控制臺獲取字符而無需回顯。僅當您按 F1 ... F12 鍵時才回傳 0
#include <iostream>
#include <conio.h>
using namespace std;
int main(){
char ch;
while (ch = (char)_getch()){
cout << ch;
if (ch == '\r')
cout << endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359975.html
