Hier ist mein Code. Warum der Standardfall erreicht wird, wenn ich die richtigen Tasten drücke (Pfeil nach oben oder Pfeil nach unten). Wenn ich es zum Beispiel benutze und die Pfeiltaste nach oben drücke, erreicht es den Standardfall, und wenn ich die Taste ein anderes Mal drücke, erreicht ich den richtigen Fall und arbeite. Warum passiert dies ?Was passiert in diesem Schalter? (C++ Scrollmenü)
#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 - "Die Routinen getch, wgetch, mvgetch und mvwgetch, lesen ein Zeichen aus dem Fenster. Wenn im No-Delay-Modus keine Eingabe erfolgt, wird die Wert ERR wird zurückgegeben. " Erhalten Sie ERR? Haben Sie den zurückgegebenen numerischen Wert ausgedruckt, um zu sehen, was es ist? – RyanP
Ich bekomme keinen Fehler. Ich denke, getch funktioniert gut. Ich denke, ist ein Problem mit den ASCII-Werten. Ich habe gehört, dass Pfeiltasten abhängig vom Betriebssystem unterschiedliche Ascii-Werte haben. Ich verstehe nicht, warum die Standardursache erreicht wird, statt nach rechts zu gehen, wenn ich die Pfeile drücke. –
Ich erinnere mich daran, dass ich ein Problem mit den Pfeiltasten hatte, wo es war, weil sie zwei Bytes an den Eingang senden und nicht nur einen. Vielleicht ist das hier der Fall und aus irgendeinem Grund wartet der getch() auf einen weiteren Tastendruck, um das zweite Byte zu erfassen. Was erhalten Sie, wenn Sie 'c = getch()' vor den Schalter bewegen und ausdrucken, wie 'c = getch(); cout << c << endl; Schalter (c) {... '? – jonhopkins