在C中移动终端的选择菜单

时间:2014-12-25 15:30:26

标签: c ubuntu terminal

我尝试制作一个菜单,您可以通过按下按钮选择不同的菜单点。就像你按下' w'小箭头正在向上移动并按下' s向下移动也许我还应该提一下,我在这个程序中使用Ubuntu及其默认终端。

以下是代码:

int printSaveMenu(config_t *config)
{
    char input;
    int position = MOV;
    clrscr();
    printf(" >Quit Game without saving?\n  Save Game!");
    while(1)
    {
        input = getch();
        if(input == 'w'/*config->movement[UP]*/ && position!=UP)
        {
            printf(" ");
            gotoxy0(2,0);
            printf(">");
            position = UP;
        }
        else if(input == 's'/*config->movement[DOWN]*/ && position !=DOWN)
        {
            printf(" ");
            gotoxy0(2,1);
            printf(">");
            position = DOWN;
        }
    }
}

这是我用于clrscr()的库。和gotoxy0();:https://ghostbin.com/paste/54oeq

对不起德国评论,但图书馆应该自行解释。 这是按下' w'并且' s'曾经:

> uit Game without saving?
 Save Game! 

谢谢!

1 个答案:

答案 0 :(得分:1)

问题是在printf完成后光标向前移动。因此,当您打印一个空格来“擦除”选择箭头时,您实际上会覆盖文本中的第一个字符。插入第二个gotoxy0电话会解决此问题:

...
if(input == 'w'/*config->movement[UP]*/ && position!=UP)
{
    gotoxy0(2,1); // <----
    printf(" ");
    gotoxy0(2,0);
    printf(">");
    position = UP;
}
else if(input == 's'/*config->movement[DOWN]*/ && position !=DOWN)
{
    gotoxy0(2,0); // <----
    printf(" ");
    gotoxy0(2,1);
    printf(">");
    position = DOWN;
}