char choice;
int start_menu_toggle[4];
register int i,j,k;
for (i=0;i<4;i++){
start_menu_toggle[i]=7;
}
int tmp=3;
start_menu_toggle[tmp]=240;
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
printf("\tВход\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), start_menu_toggle[3]);
printf("Вход как главный администратор\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), start_menu_toggle[2]);
printf("Вход как администратор\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), start_menu_toggle[1]);
printf("Вход как пользователь\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), start_menu_toggle[0]);
printf("Выход\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
for (choice=getch();choice!='\r';choice=getch()){
if (choice==0xE0 || choice==0 || choice==224){
printf("Arrow key\n");
system("pause");
}
choice=getch();
if (choice!=72 && choice!=80){
continue;
}
switch (choice){
case 72:
if (tmp<3){
start_menu_toggle[tmp]=7;
tmp++;
start_menu_toggle[tmp]=240;
}
break;
case 80:
if (tmp>0){
start_menu_toggle[tmp]=7;
tmp--;
start_menu_toggle[tmp]=240;
}
break;
}
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
printf("\tВход\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), start_menu_toggle[3]);
printf("Вход как главный администратор\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), start_menu_toggle[2]);
printf("Вход как администратор\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), start_menu_toggle[1]);
printf("Вход как пользователь\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), start_menu_toggle[0]);
printf("Выход\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
switch (tmp){
case 3:
enter_perm='s';
if (enter()){
ban_flag=0; ban_count=0; ban_time=0; ban_flag_refresh();
a_menu();
} else{
ban_count++;
ban_flag_refresh();
printf("Ошибка входа\nОсталось попыток %d\n", 3-ban_count);
system("pause");
start_menu();
}
break;
case 2:
enter_perm='a';
if (enter()){
ban_flag=0; ban_count=0; ban_time=0; ban_flag_refresh();
a_menu();
} else{
ban_count++;
ban_flag_refresh();
printf("Ошибка входа\nОсталось попыток %d\n", 3-ban_count);
system("pause");
start_menu();
}
break;
case 1:
enter_perm='u';
if (enter()){
ban_flag=0; ban_count=0; ban_time=0; ban_flag_refresh();
u_menu();
} else{
ban_count++;
ban_flag_refresh();
printf("Ошибка входа\nОсталось попыток %d\n", 3-ban_count);
system("pause");
start_menu();
}
break;
case 0:
printf("Выбран выход из программы\n");
sleep(1);
exit(1);
}
你好。这是我的登录功能的代码。使用向上/向下箭头时,一切正常,但是当您按任何其他键(甚至不是向左/向右箭头)时,菜单将不起作用,直到您再次按下任何键而不是箭头。似乎以某种方式您可以从第一个 getch 中检查索引,但是
找到了解决方案。检查箭头代码
这是一个这样的循环。我碰巧发送的第一个代码是-32。更换
在
一切正常