gpt4 book ai didi

c - 使用替代验证 key 的 fscanf()/vscanf() 函数系列的替代方案或如何创建自定义语言布局?

转载 作者:行者123 更新时间:2023-11-30 17:18:19 26 4
gpt4 key购买 nike

我对 C 相当了解。我知道从 stdin 设置变量的唯一方法是使用 fscanf()/vscanf() 函数系列。

DOS 操作系统正在嵌入式市场中复苏。我使用的设备在编程上与 DOS 兼容,并使用具有 80286 指令集的 NEC V30Mx。
问题是内置键盘没有 Enter 键,而是使用 EXE 键输入 0x1C00 key 代码( Alt enter )

所以当我编写这样的程序时:

#include <stdio.h>
#include <dir.h>
#include <dos.h>
int main(void) {
int res, number = 0;
printf("int value?");
res = scanf("%d", &number);
printf("The value is %d", number);
return;
}

scanf()被调用,屏幕上显示“int value?”。我可以写数字和大写字母。但我无法验证输出,因为没有任何特征 0x1C0D key code ,并且 EXE 键使用不同的键码。
当然,C 不了解键盘,但 C 标准库二进制文件会查找 0x1C0D key code用于输入\n

那么,作为 C 标准库一部分的 fscanf()/vscanf() 函数系列是否有替代方案?

更新:

我认为 dos 下的大多数 C 标准库都使用软件实现来执行此操作。我看到a DOS call用于读取文件,当然,使用数字 0 会导致从标准输入读取。
所以我组装了this example ,将其加载到计算器上,发现自己很惊讶制造商更愿意在其内置软件中处理问题,而不是修复操作系统...:-( (我得到了与之前相同的结果)

更新

我没有想到这一点,但由于评论,我忘记了键盘语言进行键代码重新映射。因此,为 qwerty 键盘创建自定义映射将是解决该问题的另一种方法。

最佳答案

问题是 scanf 无法读取 stdin 中代表 EXE 键的字节。

您能否研究一下当您按下 EXE 键时 getchar() 实际读取了哪些字符,并编写一个函数 hasexe() 会跳过这些(如果存在)。在 scanf() 之前或之后调用此函数。

同时检查 scanf() 返回值并检查 EOF

关于c - 使用替代验证 key 的 fscanf()/vscanf() 函数系列的替代方案或如何创建自定义语言布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29213463/

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