ここに私のコードです。右のキー(上向き矢印または下向き矢印)を押しているときにデフォルトのケースに達するのはなぜですか。たとえば、それを実行して矢印アップを押すと、デフォルトのケースに達し、別のキーを押すと正しいケースに達して作業します。なぜこうなった ?このスイッチでは何が起こっていますか? (C++スクロールメニュー)
#include <conio.h>
#include <iostream>
#include <windows.h>
using namespace std;
#define KEY_UP 72
#define KEY_DOWN 80
#define KEY_LEFT 75
#define KEY_RIGHT 77
#define KEY_RETURN 13
void admin_login()
{
system("cls");
std::string username, password;
/*gotoxy(console::width/2-10,console::height/2-3);*/
std::cout << "\nUsername: ";
std::cin >> username;
std::cout << "\nPassword: ";
std::cin >> password;
}
int main()
{
int c = 0;
int line = 0;
std::string menu_line[] = { "Admin login", "Guest login", "Change color theme", "Exit" };
while(1)
{
system("cls");
for(int i = 0 ; i < 4 ; i++)
{
if(i == line)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),12);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
std::cout << menu_line[i] << '\n';
}
switch((c=getch()))
{
case KEY_UP:
--line;
if(line == -1)
line = 3;
break;
case KEY_DOWN:
++line;
if(line == 4)
line = 0;
break;
case KEY_RETURN:
switch(line)
{
case 0:
system("cls");
admin_login();
break;
}
break;
default:
cout << endl << "null" << endl; // not arrow
system("pause");
break;
}
}
return 0;
}
https://linux.die.net/man/3/getch - "getch、wgetch、mvgetchおよびmvwgetchルーチンは、ウィンドウから文字を読み込みます。遅延なしモードでは、入力が待機していない場合、値のERRが返されます。あなたはERRを得ていますか?それが何であるかを見るために返された数値を印刷しましたか? – RyanP
私はエラーになりません。私はゲッチがうまくいっていると思う。私はASCII値の問題だと思う。矢印キーには、OS上で異なるascii値があると聞きました。なぜ私は矢印を押したときに右の場合に行くのではなく、デフォルトの原因に到達しているのか分かりません。 –
矢印キーで問題が発生したのは、1つではなく2バイトを入力に送信したためです。おそらくこれがここに当てはまり、どんな理由であれ、getch()は別のキー押しが第2のバイトを捕捉するのを待っています。 'c = getch()'をスイッチの前に移動して 'c = getch();のように表示するとどうなりますか? cout << c << endl;スイッチ(c){... '? – jonhopkins