fscanf()/vscanf()函数系列的替代品,用于使用替代验证键或如何创建自定义语言布局?

fscanf()/vscanf()函数系列的替代品,用于使用替代验证键或如何创建自定义语言布局?,c,keyboard,embedded,dos,turbo-c,C,Keyboard,Embedded,Dos,Turbo C,我对C相当了解。我知道从stdin设置变量的唯一方法是使用fscanf()/vscanf()函数族 DOS操作系统在嵌入式市场上正在复苏。我使用的设备在编程上与DOS兼容,并使用NEC V30Mx,该设备具有80286指令集。 问题在于内置键盘没有输入键,而是使用EXE键输入0x1C00键代码() 所以当我写这样一个程序时: #include <stdio.h> #include <dir.h> #include <dos.h> int main(void)

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

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

所以当我写这样一个程序时:

#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;
}
#包括
#包括
#包括
内部主(空){
int res,number=0;
printf(“int值?”);
res=扫描频率(“%d”和编号);
printf(“值为%d”,数字);
回来
}
调用
scanf()
,并在屏幕上显示“
int value?
”。我会写数字和大写字母。但是我无法验证输出,因为没有任何功能,并且EXE密钥使用不同的密钥代码。
当然,C不了解键盘,但C标准库二进制文件寻找输入
\n
的方法

那么,除了C标准库中的
fscanf()
/
vscanf()
函数系列之外,还有其他替代方法吗

更新: 我认为dos下的大多数C标准库都使用软件实现来实现这一点。 我看到了读取文件的方法,当然,使用数字0会导致从stdin读取。
因此,我组装并将其加载到计算器上,并发现自己很惊讶制造商更喜欢在其内置软件中处理问题,而不是修复操作系统…:-((我得到了与之前相同的结果)

使现代化 我没有考虑过,但多亏了这些评论,我忘记了键盘语言会重新映射按键代码。
因此,为qwerty键盘创建自定义映射将是解决此问题的另一种方法。

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

当按下
EXE
键并编写一个函数
hasexe()
,如果存在,则跳过这些字符。在
scanf()
之前或之后调用此函数。是否可以进行调查以查看
getchar()
读取的实际字符


还要检查
scanf()
返回值并检查
EOF

使用标准C库解决此问题的唯一方法是使用getchar()(或stdin上的fgetc())一次获取一个字符,自己检测EXE键,NUL终止字符串并将其传递给sscanf().

C没有键代码的概念,只有字符串和字符。您必须使用操作系统特定的功能来读取扫描键代码。因此,您的问题是您无法输入新行,a
\n
、a
10
、a
0x0A
?@JoachimPileborg:Heemmm,制造商提供了将程序从PC传输到设备的实用程序设备,但它没有任何类型的SDK。操作系统与MS-DOS 5.0兼容。但据我所知,使用返回键用于在所有实现上验证
scanf()
输入。@alk:是的,因为EXE键(相当于返回键)不会返回相同的键码。turbo-c标准库会查找用于输入
\n
/
Ox0A
。这需要软件键盘重新映射(但我不了解x86汇编程序)。另一种方法是告诉输入应该以另一个字符结尾。如果你不能使用标准库读取目标平台密钥,那么你就不能使用标准库,就这么简单。但是在DOS中读取扫描代码是一项琐碎的任务,这一问题已经解决了很长时间。使用你最喜欢的搜索引擎来搜索h。EXE键不返回任何字符。但是,正如我在问题中所说,按它返回0x1C00键代码,这对应于在运行DOS的真正电脑上使用真正的键盘按组合键。但是没有键可以返回0x1C0D键代码,这对应于真正的返回键。@user2284570:键不会返回n个字符。我的问题是:按下
EXE
键是否会导致
stdin
中的字符可用。如果不可用,则需要使用较低级别的函数集读取输入并将字符存储在缓冲区中,然后使用
sscanf()解析此缓冲区
或更简单的函数。在大多数系统上,按Alt+Enter不会导致在屏幕上写入字符。但是在进入较低级别之前,我想C标准库或C DOS标准库提供了fscanf()/vscanf()的替代方法函数family.and manage was字符被打印在屏幕上,因为delete键也管理换行符的添加/删除。manage the actions of arrows键。这意味着编写汇编程序在很大程度上是必要的。我也不同意标准C库没有定义字符在屏幕上的打印位置,也不同意actio根据我的经验,scanf()和getchar()在许多标准C库实现中在这方面表现相同(因为scanf()实际上调用getchar()或等效函数)。请记住,这是getchar(),不是非标准但经常可用的getch()此外,从您提供的链接中,我看不到解决此问题的其他标准C库方法是什么?
标准C库没有定义字符在屏幕上的打印位置,也没有定义箭头键的操作,但正如我在问题中所说的,实现是这样的。在我提供的链接中,如果我要使用该代码,请按tab会导致
scanf()
返回。问题是我不知道如何使用这种表达式的直接整数转换。您的问题是关于