Ctrl 组合键的ASCII码值的浅析


  最近在字符串处理习题中发现需要以Ctrl+Z作为结束标识符来判定字符串输入完毕,查询ASCII码表没有找到组合键的ASCII码值,一时间不知如何处理,查阅了网上一些理论之后,稍有理解,并在处理过程中产生了新的疑问,总结如下。

  ASCII码值1~26被设定为Ctrl+A~Z组合键的ASCII码值,也就是说,我们可以通过判断c==1~26来判断输入的是否是组合键Ctrl+A~Z ,可以通过下面这个测试程序来证实这个说法:

#include <stdio.h>
#include <conio.h>

int main()
{
    char c;
    while(c=getch())
        printf("%c : %d\n",c,c);
    return 0;
}

从键盘依次输入Ctrl+A~Z,得到以下结果:


   产生了新的问题,我们再用%c输出对应的Ctrl+A~Z组合键的时候,输出各种各样的奇怪的字符,找到如下完整的ASCII码表:

   仅看第一张ASCII码表的话,会发现在非打印控制字符ASCII码表中,0-31都被赋给了很多组合键,而不仅仅是Ctrl+A~Z,同时很多好玩的字符也共用这些ASCII码值,并且,0-31的ASCII码值最重要的意义是实现“控制字符”的功能,也就是说,0-31的ASCII码值可以代表三种含义:1、字符 2、组合键Ctrl+ 3、非打印控制字符

  作为字符没有疑问,但是某些组合键,譬如Ctrl+Z,Ctrl+C是有控制字符的意义的,在DOS环境下,Ctrl+Z代表输入一个EOF,那么在使用c=getchar()判断的时候如何判定c表示输入了一个Ctrl+Z还是EOF呢?

          个人粗浅认为,在字符串的末尾输入Ctrl+Z,则会被系统判定为Ctrl+Z的ASCII码值,即26,而输入一个回车之后再输入Ctrl+Z,则会被系统判定为EOF,也就是说,控制符需要在前面存在回车符或者其他控制字符(亦或者无字符)时才会被判定,但是Ctrl+C为强制结束控制符,所以在程序运行的任何位置,输入Ctrl+C都将强制结束程序(类似Alt+F4的功能),通过下面一个例子说明:

#include <stdio.h>

int main()
{
    char c;
    while(1)
    {
        c=getchar();
        printf("%c :%d\n",c,c);
    }
    return 0;
 }

如图,输入ryan^Z  (^Z表示Ctrl+Z)后,被程序解析为

r :114

y:121

a:97

n:110

→:26

也就是说Ctrl+Z被解析为Ascii码值为26的字符(正如前表所示),再输入一个回车(Ascii码值为10)后,再次输入Ctrl+Z,却被系统解析为EOF(-1),当然,对于其内在的实现机制个人理解并不到位,如果高见,还请不吝赐教。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值