gpt4 book ai didi

c - kbhit() 和 getch() 以及系统 ("cls"的可移植替代品)

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:42 28 4
gpt4 key购买 nike

我需要一种以可移植方式使用 kbhit 和 getch 功能的方法。我目前正在开发一个简单的 ascii 游戏,我需要检测是否按下了某个键。如果是我需要阅读它,如果不是我需要继续而不等待输入。我宁愿不回应它,但我不会对此挑剔。我认为 kbhit 和 getch 对此非常有用,但我只被允许使用完全可移植的代码(好吧,至少是用于 linux、mac 和 PC 的代码,但没有想到很多其他操作系统)。据我了解,termios、curses 和 conio 库并未在我需要的所有三个操作系统上完全实现。我不知所措。我找到的每个解决方案都使用不可移植的代码。有什么办法可以让我自己为此编写可移植函数吗?我目前包括 stdio.h、stdlib.h 和 time.h。我还需要一种可移植的方式来清除屏幕,因为我目前正在使用 system("cls") 和 system("clear") ,每次我更改操作系统时也必须更改它们,或者这是我可以做的一种方式if-else 并检测运行代码的操作系统以在这两个语句之间切换。下面是一段具有这些功能的代码:

    char key = ' ';
while(1)
{
system("cls");
if (_kbhit())
{
key =_getch();
printf("output: %c", key);
}
else
printf("output:");
}

这基本上是我在代码中需要的功能,但我想不出一种可移植的方法来实现它,我的老师要求代码能够在使用标准 c 和标准库的 Linux、mac 和 pc 上运行。请帮忙!请不要使用 c++,我们使用的是 c。

编辑:我不认为 ncurses 不是我想要的。有人建议我在编译时使用 #ifdef 来实现这些。我喜欢这个解决方案,但我需要一些帮助来了解如何在 linux 和 mac 上执行此操作,因为我只能使用当前设置在 Windows 上进行测试。希望我很快就会在我的另一台机器上运行 linux 进行测试,但 OSX 的价格很高,所以我很感激你的帮助。这是当前代码:

 //libraries
#include <stdio.h> //used for i/o
#include <stdlib.h> //used for clearing the screen
#include <time.h> //used to get time for random number generator

//check OS and include necessary libraries
#ifdef _WIN32
//code for Windows (32-bit and 64-bit, this part is common)
#include <conio.h>
#define CLEARSCREEN system("cls")
#define CHECKKEY _kbhit()
#define NBGETCHAR getch()

#elif __APPLE__
//code for mac
#define CLEARSCREEN system("clear")
#define CHECKKEY
#define NBGETCHAR

#elif __linux__
//code for linux
#define CLEARSCREEN system("clear")
#define CHECKKEY
#define NBGETCHAR

#else
# error "Unknown compiler"
#endif

int main()
{
char key = ' ';
while(1)
{
CLEARSCREEN;
if (CHECKKEY)
{
key=NBGETCHAR;
printf("output: %c", key);
}
else
printf("output:");
}
}

最佳答案

你应该看看可移植 ncurses图书馆。除了许多其他用于在终端中绘图的工具外,它还提供了一个 keyboard interface其中包括一个 getch() 函数。

关于c - kbhit() 和 getch() 以及系统 ("cls"的可移植替代品),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34192346/

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