if(ch=='\33')是判断啥的呢?

if(ch=='\33')是判断啥的呢?

输入上下左右不是只包含^[[A-D 吗?

咋能取到 \33

正在回答

登陆购买课程后可参与讨论,去登陆

5回答
按下方向键→时,输入给程序的编码编码其实有3byte:0x27,0x91,0x65;
而0x27就是esc键也就是\33,shell不支持直接对3字节读取!所以esc键终端转换为了^[;
其实你只需要关注按下方向键→,程序到底收到哪几个字符就行了,至于为什么是这几个字符不要在上面纠结。
  • 我想跑路 提问者 #1

    好的明白了。原来\33 就是接收 ^[ 代表的esc

    2022-08-29 14:28:02
  • 我想跑路 提问者 #2

    好的明白了。原来\33 就是接收 ^[ 代表的esc

    2022-08-29 14:28:08
慕仰031958 2022-09-04 22:19:46
山行老师 2022-08-27 17:08:54
你要先确认一下你在终端下按键→后产生了几个字符,分别是什么,代码里面的意思是按下方向键→对应输入的三个字符依次是\33 '[' 'A'。
我想跑路 提问者 2022-08-27 09:14:14
山行老师 2022-08-27 00:29:36

这个是在录入字符时,用户按了键盘上的方向键,此时终端收到的是多个字符,跟你的终端配置有关:

比如以下代码运行后,入户按下方向键→,输入的就是0x1B5B43这样的3个char,也就是说你需要判断3个字符依次为0x1B、0x5B、0x43才能确定用户按了方向键→,测试键位的代码如下:

#include <stdio.h>

int main()

{

char a;

while(1){

a = getchar();

printf("%#x\n", a);

}

return 0;

}


  • 提问者 我想跑路 #1

    老师我上面补了截图,你看一下

    2022-08-27 09:14:33
  • 提问者 我想跑路 #2

    所以验证ch=='\33',是因为终端配置的原因吗?

    2022-08-27 15:25:43
  • 山行老师 回复 提问者 我想跑路 #3

    你要先确认一下你在终端下按键→后产生了几个字符,分别是什么,代码里面的意思是按下方向键→对应输入的三个字符依次是\33 '[' 'A'。

    2022-08-27 17:09:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师