aaron0919 发表于 2022-10-22 20:30:31

一个奇怪的程序

本帖最后由 aaron0919 于 2022-10-23 13:44 编辑

我做了一个程序
#include<conio.h>
#include<cstdio>
using namespace std;
int main()
{
        char x;
        while(1)
        {
                x=getch();
                putchar(x);
        }
}
就是读入一个字符,输出这个字符

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

为什么

人造人 发表于 2022-10-22 20:31:52

jackz007 发表于 2022-10-22 20:41:04

         不用包含 iostream , 你确定?

傻眼貓咪 发表于 2022-10-22 20:45:28


我做了一个程序

print("Hello World")

zhangjinxuan 发表于 2022-10-22 21:40:35

代码怎么不完整?

元豪 发表于 2022-10-23 09:34:05

{:5_94:}

aaron0919 发表于 2022-10-23 13:39:33

jackz007 发表于 2022-10-22 20:41
不用包含 iostream , 你确定?

是的

aaron0919 发表于 2022-10-23 13:40:29

zhangjinxuan 发表于 2022-10-22 21:40
代码怎么不完整?

putchar//输出单个字符,同c语言
getch//瞬间读入一个字符

aaron0919 发表于 2022-10-23 13:45:06

转悬赏的时候出错了
现在改回来了

jackz007 发表于 2022-10-23 13:57:40

本帖最后由 jackz007 于 2022-10-23 14:30 编辑

          输出其他 "奇怪" 字符是因为你从键盘输入的是不可打印字符打印出来的样子。
          只要把输入字符做个过滤,不让它打印不可打印字符就不会看到那些现象了。
          试试下面的代码
#include<conio.h>
#include<cstdio>
using namespace std                              ;
int main()
{
      char x                                     ;
      while(1)
      {
                x = getch()                        ;
                if(x == '\r') break                ; // 按下回车键结束
                if(x >= 32 && x <= 126) putchar(x) ;
      }
}

高山 发表于 2022-10-23 14:46:04

???

aaron0919 发表于 2022-10-23 21:12:09

jackz007 发表于 2022-10-23 13:57
输出其他 "奇怪" 字符是因为你从键盘输入的是不可打印字符打印出来的样子。
          只要把输 ...

那么那些奇怪的字符,F1,为什么会打出中文?

aaron0919 发表于 2022-10-23 21:12:42

@liuzhengyuan

jackz007 发表于 2022-10-23 21:30:56

aaron0919 发表于 2022-10-23 21:12
那么那些奇怪的字符,F1,为什么会打出中文?

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

int main(void)
{
      unsigned char a , b                                                                ;
      for(a = 200 ; a < 220 ; a ++) for(b = 200 ; b < 220 ; b ++) printf("%c%c" , a , b) ;
      printf("\n")                                                                     ;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

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

D:\\C>

xiaoyouzi11 发表于 2022-10-23 21:36:29

1.输入enter要看在哪里输入
2.ascll了解一下
3.你怎么打的这些键
4.打F1是打F再打1
5.中文算字符吗?!?!?!?!?!

howzyao 发表于 2022-10-23 23:04:39

最后一个改写的,尽然跑到扩展字符集里去了,真牛。

aaron0919 发表于 2022-10-24 08:52:40

xiaoyouzi11 发表于 2022-10-23 21:36
1.输入enter要看在哪里输入
2.ascll了解一下
3.你怎么打的这些键


F1,是键盘最上面一行的功能按钮
笔记本的话,得先按fn,再摁上面的f1f2

aaron0919 发表于 2022-10-24 08:54:52

xiaoyouzi11 发表于 2022-10-23 21:36
1.输入enter要看在哪里输入
2.ascll了解一下
3.你怎么打的这些键


中文在c++中是负数
如char a='赞';
printf("%d",a);

aaron0919 发表于 2022-10-24 08:56:42

jackz007 发表于 2022-10-23 21:30
因为编码,试试下面的代码,也许能明白点什么

      编译、运行实况:

功能按键,是怎么存放的?

人造人 发表于 2022-10-24 13:00:00

aaron0919 发表于 2022-10-24 08:56
功能按键,是怎么存放的?

sh-5.1$ cat main.c
#include <stdio.h>

int main(void) {
    while(1) {
      char ch;
      scanf("%c", &ch);
      printf("%hhx\n", ch);
    }
    return 0;
}
sh-5.1$ gcc -g -Wall -o main main.c
sh-5.1$ ./main
^[OP
1b
4f
50
a
^[OQ
1b
4f
51
a
^[OR
1b
4f
52
a
^[OS
1b
4f
53
a
^C
sh-5.1$
页: [1] 2
查看完整版本: 一个奇怪的程序