") 上移动 printf 指示器 ("option 1\n option 2\n option 3")?-6ren"> ") 上移动 printf 指示器 ("option 1\n option 2\n option 3")?-我使用箭头键作为输入,在 printf 菜单中上下移动 printf 箭头(“==>”)。 我正在使用一个函数来计算箭头应该在的位置,并使用 switch case 和 printf("\n==>")-6ren">
gpt4 book ai didi

c - 如何在 printf 菜单 ("==>") 上移动 printf 指示器 ("option 1\n option 2\n option 3")?

转载 作者:行者123 更新时间:2023-11-30 19:01:43 25 4
gpt4 key购买 nike

我使用箭头键作为输入,在 printf 菜单中上下移动 printf 箭头(“==>”)。

我正在使用一个函数来计算箭头应该在的位置,并使用 switch case 和 printf("\n==>") 来放置箭头应该是,但它也会在新行中打印菜单。

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>

void menu(void);
int arrowPos(void);

int main(void)
{
int aDet, aDet2;
int aCnt;

for(;;)
{
aDet = getch();
aDet2 = 0;
if(aDet == 0xE0)
{
aDet2 = getch();
if(aDet2 == 80) arrowPos();
}
}
return 0;
}

int arrowPos(void)
{
int aCnt;

LOOP:
aCnt++;

switch(aCnt)
{
case 1:
system("cls");
printf("==>");
// menu();
break;
case 2:
system("cls");
printf("\n==>");
break;
case 3:
system("cls");
printf("\n\n==>");
// menu();
break;
case 4:
aCnt = 0;
goto LOOP;
break;
}

menu();
//printf("%d",aCnt);
}

void menu(void)
{
printf("Option 1\n");
printf("Option 2\n");
printf("Option 3");
}

当它在第二个和第三个箭头上打印菜单时,菜单也会打印在新行上。

而不是看起来像

 Option1
Option2
==>Option3

看起来像

 ==>Option1
Option2
Option3

最佳答案

我认为最干净的方法是包含选项的数组。在迭代数组时,您可以在正确的索引处打印箭头。

#define OPTION_CNT 3
const char *option_texts[OPTION_CNT] = {
"Option 1",
"Option 2",
"Option 3"
};
const char * arrow_text = "==>";

void menu(size_t arrowIndex){
for(size_t i = 0; i < OPTION_CNT; ++i){
if(i == arrowIndex){
printf("%s ", arrow_text);
}
printf("%s\n", option_texts[i]);
}
}

如果您无法停止以面向对象的方式思考,您还可以通过创建一个结构体来扩展它,该结构体不仅包含要显示的文本,还包含选择选项时调用的方法。

#define OPTION_CNT 3
typedef void OptionHandler();
struct Option {
OptionHandler *handler;
const char *text;
} options[OPTION_CNT] = {
{doSomething1, "Option 1"},
{doSomething2, "Option 2"},
{doSomething3, "Option 3"}
}

然后你可以更换线路

printf("%s\n", option_texts[i]);

printf("%s\n", options[i].text);

当选择该选项时,您只需

options[aCnt].handler();

因此,您将所有选项定义集中在一处,并且可以摆脱这些 switch 语句。

关于c - 如何在 printf 菜单 ("==>") 上移动 printf 指示器 ("option 1\n option 2\n option 3")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57362007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com