【问题标题】:query regarding getch() input关于 getch() 输入的查询
【发布时间】:2014-04-25 11:31:05
【问题描述】:

代码:-

char ch,ch1;
ch=getchar();
ch1=getch();
printf("%c\n%c",ch,ch1);

当我在ch=getchar() 期间输入一个字符时,我必须按回车键,该键仍保留在输入缓冲区中。
ch1=getch() 不会读取该输入键。 为什么ch1=getch() 没有读取剩余的回车键?

与这个事实相矛盾
代码 2:-

char ch,ch1;
ch=getch();
ch1=getch();
printf("%c\n%c",ch,ch1);

当我按下产生两个输出的箭头键时,第一个输出存储在ch,第二个输出存储在ch1。

【问题讨论】:

    标签: c shell buffer getchar getch


    【解决方案1】:

    标准 C 输入函数仅在您按下 Enter 键时开始处理您输入的内容。

    您按下的每个键都会将一个字符添加到系统缓冲区 (shell),但只有当您按下 Enter 时,这些字符才会MOVED 到 C 标准缓冲区。

    所以在ch = getchar(); 之后,C 缓冲区包含一个换行符并且系统缓冲区为空。 (getch(),不是标准函数,会读取系统缓冲区)。


    在第二个示例中,getch() 函数为特殊键返回多个键码(getch() 未标准化,这些码可能会有所不同)。

    例如

    • MinGW / Visual C++ (conio.h):两个键码。先是 0x00 或 0xE0,然后是识别所按下键的代码。
    • GCC (termios.h):三个键码。首先是 '\033' (ESC),然后是 '[',最后是识别按下的键的代码。

    无论如何,仅使用getch(),您正在读取系统缓冲区中的所有字符(不强制传输到 C 标准缓冲区)。

    【讨论】:

      猜你喜欢
      • 2019-04-28
      • 2014-08-03
      • 1970-01-01
      • 2016-11-21
      • 2016-02-25
      • 1970-01-01
      • 2018-12-25
      • 2018-10-20
      • 1970-01-01
      相关资源
      最近更新 更多