gpt4 book ai didi

c - 关于 getch() 输入的查询

转载 作者:行者123 更新时间:2023-12-02 04:55:43 25 4
gpt4 key购买 nike

代码:-

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 输入函数仅在您按下 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 标准缓冲区)。

关于c - 关于 getch() 输入的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22502168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com