我更喜欢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 ()。
以上就是c/c++开发分享替代fscanf()/ vscanf()函数系列以使用替代validation密钥或如何创建自定义语言布局?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/523267.html