菜单选择使用C中的箭头键(例如:向上和向下)

时间:2014-02-06 09:20:15

标签: c turbo-c++

我在C中编写了以下程序。它运行得很好(Windows 7,turbo c ++)。该计划是使用up arrowdown arrow键选择数字,并以打印。

#include<stdio.h>
#include<conio.h>
#include<bios.h>

int main(){
    int x,i=2;

g:
   clrscr();
   printf("Print");
   printf("\n 1");
   printf("\n 2");
   printf("\n EXIT");
   printf("\nChoose using arrow key");
   gotoxy(1,i);

while((x=bioskey(0))!=75) // I took a value so that the loop continues. 
{                         // no other reason for 75      
  if(x==20480){
    if(i<=3){
    gotoxy(1,i+1);
    i=i+1;
    }else{}
  }else if(x==18432){
              if(i==2){}else{
              gotoxy(1,i-1);
              i=i-1;}
  }else if(x==7181){
          clrscr();
          if(i==2){
          printf("ONE ");
          }else if(i==3){
          printf("TWO ");
              }else{
          printf("thank you");
          getch();
              return 0;
              }
    getch();
    goto g;
}else{}

}

 getch();
 return 0;
}

使用箭头键有没有比这更简单的方法来实现相同的功能?

还帮我突出显示所选行(光标闪烁的行)。

还有一个问题: 输入" # "时,屏幕上会显示颜色变化。如何同样改变字母的颜色?请不要使用<GRAPHICS.H>

来回答问题

3 个答案:

答案 0 :(得分:2)

以后需要回答的人也可以参考。使用箭头键选择并突出显示的简单示例。

#include<stdio.h>
#include<conio.h>
#include<bios.h>

void disp(int n)
{
int i=0;
char menu[4][20]={"PRINT","1","2","EXIT"};

clrscr();
gotoxy(1,1);
for(i=0;i<4;i++){

    if(i==n){
    textbackground(WHITE);
    textcolor(RED);
    gotoxy(1,i+1);
    cprintf("%s\n",menu[i]);
    textbackground(BLACK);
    textcolor(WHITE);
    }else{
    gotoxy(1,i+1);
    textcolor(WHITE);
    cprintf("%s\n",menu[i]);
    }
        }

}

int main()
{
 int x,i=2;
 disp(1);
 gotoxy(1,i);


 while((x=bioskey(0))!=75)
 {

 gotoxy(1,i);
    if(x==20480){
        if(i<=3){
            i=i+1;
            disp(i-1);
            gotoxy(1,i);
            }else{}
    }else if(x==18432){
            if(i==2){}else{
        i=i-1;
            disp(i-1);
            gotoxy(1,i);
            }
    }else if(x==7181){
        clrscr();
            if(i==2){
            printf("ONE");
            }else if(i==3){
            printf("TWO");
            }else{
            printf("Thank You");
            getch();
            return 0;
            }
    }else{
    disp(i-1);
    gotoxy(1,i);
    }
 }

return 0;
}

答案 1 :(得分:1)

可能是这段代码有效。

警告此代码未经过编译/测试。

int highlight_option(int index)
{
    int i;
    char menu[4][6] = {"Print", "1", "2", "Exit"};
    clrscr();
    for (i = 0; i < 4; i++) {
        if (i == index) {
            textbackground(WHITE);
            textcolor(BLACK);
            cprintf("%s\n", menu[i]);
            textbackground(BLACK);
            textcolor(WHITE);
        } else {
            printf("%s\n", menu[i]);
        }
    }
    return 0;
}

从箭头处理程序调用此函数,在i + 1

之前将i - 1gotoxy传递给此函数

答案 2 :(得分:0)

使用bioskey读取UP和DN箭头键。请参阅以下代码:

#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <bios.h>


#define LTARROW 0x4B 
#define RTARROW 0x4D 
#define UPARROW 0x48 
#define DNARROW 0x50 
#define CR 0x0d 
#define ESC 0x1b 

#define F1_Key 0x3b00
#define F2_Key 0x3c00
#define F3_Key 0x3d00
#define F4_Key 0x3e00
#define F5_Key 0x3f00
#define F6_Key 0x4000
#define F7_Key 0x4100
#define F8_Key 0x4200
#define F9_Key 0x4300
#define F10_Key 0x4400


int handle_keyevents()
{
      int key = bioskey(0);
      if (isalnum(key & 0xFF))
      {
            printf("'%c' key pressed\n", key);
            return 0;
      }

      switch(key)
      {
      case F1_Key:
            printf("F1 Key Pressed");
            break;
      case F2_Key:
            printf("F2 Key Pressed");
            break;
      case F3_Key:
            printf("F3 Key Pressed");
            break;
      case F4_Key:
            printf("F4 Key Pressed");
            break;
      case F10_Key:
            printf("F10 Key Pressed");
            return -1;
      default:
            printf("%#02x\n", key);
            break;
      }
      printf("\n");
      return 0;
}

void main()
{
      int key;
      printf("Press F10 key to Quit\n");

      while(1)
      {
            key = bioskey(1);
            if(key > 0)
            {
                  if(handle_keyevents() < 0)
                        break;
            }
      }
}

参考:

http://www.softwareandfinance.com/Turbo_C/bioskey.html

http://www.softwareandfinance.com/Turbo_C/Graphics_MoveObject.html