我有以下選單,應該根據用戶是否鍵入鍵F1或來更新F2:
int main()
{
bool f1 = false;
bool f2 = false;
while (true)
{
std::cout << "[F1]: " << (f1 ? "ON" : "OFF") << std::endl;
std::cout << "[F2]: " << (f2 ? "ON" : "OFF") << std::endl;
std::cout << "[INS] to quit" << std::endl;
if (GetAsyncKeyState(VK_INSERT) & 0x1)
break;
if (GetAsyncKeyState(VK_F1) & 0x1)
f1 = !f1;
if (GetAsyncKeyState(VK_F2) & 0x1)
f2 = !f2;
Sleep(100);
cleanWindow();
}
return 0;
}
現在,我system("cls")之前使用過并且它作業“正常”,但有人告訴我我應該使用 Win32 API 來清理控制臺,因此我cleanWindow()按照
我的問題是,我該如何解決這個問題?如何將輸出帶回外殼頂部?
編輯:
我還編輯了cleanWindow()函式來撰寫序列:\033[2J和L"\033[H"with WriteConsoleW(),它有效,但我仍然得到“閃爍”效果,就像 with 一樣system("cls"),這是我試圖避免的。
uj5u.com熱心網友回復:
SetConsoleCursorPosition清除后,您可以使用將游標位置設定回左上角。
還有ANSI 轉義碼(類似于您用來清除螢屏的轉義碼),可以讓您重新定位游標。
"\033[r;cH"
替換r為c要移動到的行和列。它們是基于 1 的,默認位于左上角,因此您可以使用"\033[1;1H"或僅使用"\033[H"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328474.html
