鱼C论坛

 找回密码
 立即注册
查看: 3093|回复: 23

一个奇怪的程序

[复制链接]
发表于 2022-10-22 20:30:31 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 aaron0919 于 2022-10-23 13:44 编辑

我做了一个程序
  1. #include<conio.h>
  2. #include<cstdio>
  3. using namespace std;
  4. int main()
  5. {
  6.         char x;
  7.         while(1)
  8.         {
  9.                 x=getch();
  10.                 putchar(x);
  11.         }
  12. }
复制代码

就是读入一个字符,输出这个字符

如果输入enter,那么从本行的第一个字符重新输入
其他奇怪的现象:
输入CTRL+c或者z,x,v,a,y都会输出其他奇怪字符
方向键,del,insect,esc都会输出
F1,2,3,4,5等等也会输出
输入中文会正常输出

为什么

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-22 20:31:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-22 20:41:04 | 显示全部楼层
         不用包含 iostream , 你确定?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-22 20:45:28 | 显示全部楼层

我做了一个程序

  1. print("Hello World")
复制代码

点评

good  发表于 2023-4-20 13:15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-22 21:40:35 | 显示全部楼层
代码怎么不完整?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-23 09:34:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-23 13:39:33 | 显示全部楼层
jackz007 发表于 2022-10-22 20:41
不用包含 iostream , 你确定?

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-23 13:40:29 | 显示全部楼层

putchar//输出单个字符,同c语言
getch//瞬间读入一个字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-23 13:45:06 | 显示全部楼层
转悬赏的时候出错了
现在改回来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-23 13:57:40 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-23 14:30 编辑

          输出其他 "奇怪" 字符是因为你从键盘输入的是不可打印字符打印出来的样子。
          只要把输入字符做个过滤,不让它打印不可打印字符就不会看到那些现象了。
          试试下面的代码
  1. #include<conio.h>
  2. #include<cstdio>
  3. using namespace std                                ;
  4. int main()
  5. {
  6.         char x                                     ;
  7.         while(1)
  8.         {
  9.                 x = getch()                        ;
  10.                 if(x == '\r') break                ; // 按下回车键结束
  11.                 if(x >= 32 && x <= 126) putchar(x) ;
  12.         }
  13. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-23 14:46:04 | 显示全部楼层
???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-23 21:12:09 | 显示全部楼层
jackz007 发表于 2022-10-23 13:57
输出其他 "奇怪" 字符是因为你从键盘输入的是不可打印字符打印出来的样子。
          只要把输 ...

那么那些奇怪的字符,F1,为什么会打出中文?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-23 21:12:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-23 21:30:56 | 显示全部楼层
aaron0919 发表于 2022-10-23 21:12
那么那些奇怪的字符,F1,为什么会打出中文?

         因为编码,试试下面的代码,也许能明白点什么
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         unsigned char a , b                                                                ;
  5.         for(a = 200 ; a < 220 ; a ++) for(b = 200 ; b < 220 ; b ++) printf("%c%c" , a , b) ;
  6.         printf("\n")                                                                       ;
  7. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3. 热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵
  4. 嗜噬适仕侍释饰氏市恃室视试收手首守寿授售巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳
  5. 倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇
  6. 稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡
  7. 腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼
  8. 胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂
  9. 匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折
  10. 秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综
  11. 厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽
  12. 谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹

  13. D:\[00.Exerciese.2022]\C>
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
aaron0919 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-23 21:36:29 | 显示全部楼层
1.输入enter要看在哪里输入
2.ascll了解一下
3.你怎么打的这些键
4.打F1是打F再打1
5.中文算字符吗?!?!?!?!?!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-23 23:04:39 From FishC Mobile | 显示全部楼层
最后一个改写的,尽然跑到扩展字符集里去了,真牛。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-24 08:52:40 | 显示全部楼层
xiaoyouzi11 发表于 2022-10-23 21:36
1.输入enter要看在哪里输入
2.ascll了解一下
3.你怎么打的这些键

F1,是键盘最上面一行的功能按钮
笔记本的话,得先按fn,再摁上面的f1f2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-24 08:54:52 | 显示全部楼层
xiaoyouzi11 发表于 2022-10-23 21:36
1.输入enter要看在哪里输入
2.ascll了解一下
3.你怎么打的这些键

中文在c++中是负数
  1. char a='赞';
  2. printf("%d",a);
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-24 08:56:42 | 显示全部楼层
jackz007 发表于 2022-10-23 21:30
因为编码,试试下面的代码,也许能明白点什么

        编译、运行实况:

功能按键,是怎么存放的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-24 13:00:00 | 显示全部楼层
aaron0919 发表于 2022-10-24 08:56
功能按键,是怎么存放的?
  1. sh-5.1$ cat main.c
  2. #include <stdio.h>

  3. int main(void) {
  4.     while(1) {
  5.         char ch;
  6.         scanf("%c", &ch);
  7.         printf("%hhx\n", ch);
  8.     }
  9.     return 0;
  10. }
  11. sh-5.1$ gcc -g -Wall -o main main.c
  12. sh-5.1$ ./main
  13. ^[OP
  14. 1b
  15. 4f
  16. 50
  17. a
  18. ^[OQ
  19. 1b
  20. 4f
  21. 51
  22. a
  23. ^[OR
  24. 1b
  25. 4f
  26. 52
  27. a
  28. ^[OS
  29. 1b
  30. 4f
  31. 53
  32. a
  33. ^C
  34. sh-5.1$
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
aaron0919 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 19:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表