替代fscanf()/ vscanf()函数系列以使用替代validation密钥或如何创建自定义语言布局?

我更喜欢C语言。我知道从stdin设置变量的唯一方法是使用fscanf() / vscanf()函数系列。

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

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

 #include  #include  #include  int main(void) { int res, number = 0; printf("int value?"); res = scanf("%d", &number); printf("The value is %d", number); return; } 

调用scanf()并在屏幕上显示“ int value? ”。 我可以写数字和超级字母。 但我无法validation输出,因为0x1C0D键代码没有任何特征,EXE键使用不同的键码。
当然C不知道键盘,但C标准库二进制文件寻找输入\n的0x1C0D键代码 。

那么是fscanf() / vscanf()函数系列的替代品,它是C标准库的一部分吗?

更新:

我认为dos下的大多数C标准库都使用软件实现来实现这一点。 我看到DOS调用读取文件,当然,使用数字0导致从标准输入读取。
所以我组装了这个例子 ,将它加载到计算器上,发现自己很惊讶制造商首选处理它的内置软件中的问题,而不是修复操作系统… :- ((我得到了相同的先前结果)

更新

我没想过但是由于评论,我忘了键盘语言做重键代码重映射。 因此,为qwerty键盘创建自定义映射将是另一种解决问题的方法。

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

你可以调查一下,当你按下EXE键时, getchar()会读取哪些实际字符,然后写一个跳过这些hasexe()的函数hasexe()如果存在)。 在scanf()之前或之后调用此函数。

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

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