C++ 按住屏幕以接受箭头键
对于使用箭头键,首先必须存储它以进行分析。这就是为什么我使用C++ 按住屏幕以接受箭头键,c++,arrow-keys,getch,C++,Arrow Keys,Getch,对于使用箭头键,首先必须存储它以进行分析。这就是为什么我使用scanf来存储它。 但是,当我尝试运行此代码时,当我按up键时,它会显示^[[A,当我按enter键时,此^[[A删除并退出程序,而不打印printf(“%s”,c”)的printf语句。和printf(“up\n”)。 #包括 int main() { charc[50]; scanf(“%s”、&c); printf(“%s”,c); 如果(getch()='\033'){//如果第一个值是esc getch();//跳过[ ge
scanf
来存储它。
但是,当我尝试运行此代码时,当我按up键时,它会显示^[[A
,当我按enter键时,此^[[A
删除并退出程序,而不打印printf(“%s”,c”)的printf语句。
和printf(“up\n”)。
#包括
int main()
{
charc[50];
scanf(“%s”、&c);
printf(“%s”,c);
如果(getch()='\033'){//如果第一个值是esc
getch();//跳过[
getch();//跳过[
开关(getch()){//实际值
案例“A”:
printf(“UP\n”);
打破
案例“B”:
printf(“向下\n”);
打破
}
}
返回0;
}
如果您使用ncurses库,您会发现它非常简单。只需通过查看了解如何安装它。
安装后,请阅读上的零件
下面是一个示例代码
#include <ncurses.h>
int main()
{
int ch;
initscr();
raw();
keypad(stdscr, TRUE);
noecho();
while(1)
{
ch = getch();
switch(ch)
{
case KEY_UP:
printw("\nUp Arrow");
break;
case KEY_DOWN:
printw("\nDown Arrow");
break;
case KEY_LEFT:
printw("\nLeft Arrow");
break;
case KEY_RIGHT:
printw("\nRight Arrow");
break;
}
if(ch == KEY_UP)
break;
}
endwin();
}
#包括
int main()
{
int-ch;
initscr();
原始();
键盘(stdscr,真);
noecho();
而(1)
{
ch=getch();
开关(ch)
{
案例编号:
printw(“\nUp箭头”);
打破
案例键向下:
printw(“\n向下箭头”);
打破
案例键左:
printw(“\n左箭头”);
打破
案例编号:右:
printw(“\n右箭头”);
打破
}
如果(ch==键向上)
打破
}
endwin();
}
这不是它的工作原理!你到底想做什么?重新发明诅咒,或者…?先生,这个程序启动屏幕,在按键时不打印任何printf语句,当按下uparrow时,不打印“uparrow”退出.先生,我在您的代码中遇到了问题。我们应该使用printw代替printf来打印格式化输出。先生,但是当我们初始化屏幕时,此代码可以工作。它在当前控制台上不工作。谢谢。我认为ncurses是在linux设备中预设的。ri8@Jaydeep@AmrithKrishnancurses是预先安装在我们的实验室操作系统上的buntu和它工作得很好。不过,为了让它在实验室操作系统上工作,我们需要将printf更改为printw。@piyush balwani您只需要在shell中将printf转换为printw。我想,没有其他需要更改的。
#include <ncurses.h>
int main()
{
int ch;
initscr();
raw();
keypad(stdscr, TRUE);
noecho();
while(1)
{
ch = getch();
switch(ch)
{
case KEY_UP:
printw("\nUp Arrow");
break;
case KEY_DOWN:
printw("\nDown Arrow");
break;
case KEY_LEFT:
printw("\nLeft Arrow");
break;
case KEY_RIGHT:
printw("\nRight Arrow");
break;
}
if(ch == KEY_UP)
break;
}
endwin();
}