- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要一种以可移植方式使用 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/
我从自己的项目中引用了一个不符合 CLS 的现有 DLL。当我将我的程序集标记为符合 CLS 时,我收到编译器警告,指出引用的程序集中的名称不符合 CLS。 有没有一种方法可以使我的程序集符合 CLS
我有一个 python 程序,我试图在命令提示符下使用 ANSI 代码以彩色文本打印“Hello”。当我正常打印时,它不工作,它只是打印?和文本,但是当我在清除命令提示符后打印它时它工作正常。有人可以
CLS 允许类中代码的私有(private)部分不符合 CLS。这怎么可能,因为最终代码需要转换为 IL? 最佳答案 CLS 代表通用语言规范。为简化起见,它基本上是所有 .NET 语言必须了解的最少
只是为了我的澄清: 我能否在 .NET Framework 中抛出符合 CLS 和不符合 CLS 的异常?我正在使用 C# 3.0。 当我捕捉到异常时 catch(Exception ex) { }
难道 super(cls, instance) 和 super(cls, subclass) 都返回 cls 的父类(super class)吗? 最佳答案 差别很大; super() 使用类型(类)
我如何在 javasciript 中进行原型(prototype)继承。通常我这样做和 derivedFn.prototype = object.create(clsParent.prototype
我对 python 文档中的以下示例感到有点困惑 here . >>> class inch(float): ... "Convert from inch to meter" ...
我以前从未见过其他任何东西像这样工作。 还有其他的东西可以做到这一点吗? >>> class NothingSpecial: @classmethod def meth(cls):
在Python中,假设obj类型为objtype ,是super(cls,obj)和super(cls,objtype)相同? super(cls,obj) 是否正确?转换obj到另一个对象,其类是
如果我有一个项目并将其标记为 我是否需要在项目中的每个类之前放置CLSCompliant(True),还是它们都默认为CLSCompliant? 最佳答案 在程序集级别添加 CLSCompliant
python unittest有没有办法从文件中读取参数并将其分配给setUpClass(cls)? 例: 我有json文件,其中包含: { "browserType" : "Chrome",
我正在使用 .net Framework 3.5 并在我的项目中使用 RDLC 文件进行报告。我面临的问题是,在我的数据集中,我有一个以数字命名的字段“63”,每当我在我的 RDLC 文件中使用它时,
我正在尝试用 C 语言编写 Snake,但目前我刚刚编写了一个可变长度和宽度的矩阵。由于我希望游戏(即 map )不断刷新,所以我尝试这样编写代码,但“刷新效果”不太好看到。我能做什么? #inclu
这个问题在这里已经有了答案: Why is this name with an underscore not CLS Compliant? (8 个答案) 关闭 9 年前。 我有一个类,它包含三个字
如何使程序集/类符合 CLS?他们应该有什么标准?如果我只是用 [assembly: CLSCompliant(true)] 注释我的程序集并且我的类型之一不符合 CLS,它会影响程序集的行为吗? 最
我在构建项目时遇到错误: Warning as Error: Type of 'OthersAddresses.AddresseTypeParameter' is not CLS-compliant
我目前正在阅读 Albahari 的 C# 3.0 in a Nutshell并在第241,在谈到数组索引时,他是这样说的: Nonzero-based arrays are not CLS (Com
我在 C# 类库中有以下代码... public static class foo { public enum bar { bsNone = -1, b
我有一个 .NET 3.5 C# 项目,它的命名空间为 SampleNamespace.Tools.Sample。 如果我将名为“Samplenamespace.Utils.Example”的程序集添
今天我在查看别人的代码,看到了这个: class A(B): # Omitted bulk of irrelevant code in the class def __init__(s
我是一名优秀的程序员,十分优秀!