getch和getchar的回车处理

  /
//----------CODE1------------------------
int a[5] = {0,0,0,0,0};
int i = 0;
while((ch = getchar()) && i < 5)
{a[i] = ch;i++;}
for(int idx = 0; idx < 5; idx ++)
    printf("%d ", a[idx]);
//连敲6下回车,退出循环,查看打印
//打印显示:10 10 10 10 10


//----------CODE2------------------------
char ch;
int a[5] = {0,0,0,0,0};
int i = 0;
while((ch = getch()) && i < 5)
{a[i] = ch;i++;}
for(int idx = 0; idx < 5; idx ++)
   printf("%d ", a[idx]);
//连敲6下回车,退出循环,查看打印
//打印显示:13 13 13 13 13
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


     回车    0x0d      \r

     换行    0x0a      \n
     首先看上边两段代码


    我们在写字板里输入  1回车2回车3回车4    ,然后用十六进制查看器打开查看,发现里边的实际内容是 31 0D 0A 32 0D 0A 33 0D 0A 34  ,可以发现回车键由0D 0A两个字符组成,并且是先0D后0A,下面引用一段CSDN论坛大神的回复:
"
    Windows里回车输入的其实是\r\n,但是C库会对其进行处理(读写文本文件时也会),统一转换为规范的\n。而getch()则是比较低级的,会越过这个处理,貌似没有经过输入流缓冲,而是直接调用键盘服务中断获得的,就是原始按键。
"
    那么,上述代码可以给出如下解释:
                                                              1.getchar收到的\r\n被C库同意转换为了\n, 也就是0x0a ;
                                                              2.getch没有进行处理,该函数收到键值,就马上返回,所以getch只是拿到先输入的0x0d就返回了,而0x0a就被抛弃了。
    于是出现了上述情况。
    以上分析为个人理解,如有差错,请指教~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值