[ZOJ 3883] Scan Code 劳民伤财+劳神+并不科学的一个 模拟题

先贴聊天记录一部分:

<zimpha#************> 2015-07-26 18:51:25
C题是我那个大四的final队友出的题....描述不清...坑人无数
<zimpha#************> 18:54:43 
现在内部题库里面已经没啥可用的题了..于是就挂出了这些恶心题

……说恶心,也没办法,硬着头皮做。

反正任务很简单,就是,翻译扫描码并做相应操作。

(扫描码的工作机制的话,就是每个按键有2个码,一个通码Make Code一个断码Break Code,按下的时候发一个通码,松开的时候发一个断码,具体机制可以参见《自己动手写操作系统》一书,自己用汇编+C语言写一个能处理键盘输入的,DOS味十足的底层程序,当然这不是这里的重点)

其他按键都还好了,只有4个特殊按键需要照顾:左右Shift、Caps Lock、Backspace。

然后他们怎么样的工作机制?!题目一句话都没说!!!!!!

题目居然忘了说明白这个看起来小但完全能影响结果的事情了!!!!!!

更糟糕的是,这些按键的组合行为在不同系统,不同编辑器下行为完全不同!

比如:

  • 大写锁关闭,按住CapsLock,然后打英文字母,Win下打出来的是大写字母,Mac下打出来的是小写字母!
  • 按住Shift,然后按Tab,Windows的记事本下还是会输出一个制表符( ' \t ' ),但是在Linux的gedit、Win的代码编辑器下,是撤销了缩进(删除一个制表符)!
  • 你按下Backspace的时候要我输出\b(ASCII 8,表Backspace)还是删去一个字符?

搞不清楚的细节问题太多了,想发 Clarification 问一下却不行,无力吐槽……


好吧,我们就按照Win下的行为写:

  • 按下CapsLock时,大写锁状态翻转,在按下期间CapsLock的状态不变(不管发了多少Make Code),直到松开后再次按下
  • 2个Shift互不干扰,CapsLock关闭的情况下,只要按下任何一个Shift,小写边大写,有2个字符的按键则打上面那个字符。两个Shift都按下的情况同理
  • CapsLock打开的情况下,按下任何一个Shift,按字母按键,输出小写字母,有2个字符的按键还是打上面那个字符。
  • 按住Shift和不按住Shift的时候按Tab,行为一致,输出一个 ' \t &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值