【问题标题】:Why are there two characters while I press just once?为什么我按一次时有两个字符?
【发布时间】:2018-11-09 14:20:11
【问题描述】:

为什么我只按一个字母键(例如,a)时会得到两次迭代?

#include<stdio.h>

void main()
{
    char c;
    do
    {
        c = getch();
        printf("Your input: %c\nPress x to exit.\n\n", c);
    } while (c != 'x');
}

【问题讨论】:

  • 再数一遍。你在键盘上按了多少键?
  • @WhozCraig:我想我只按一次!
  • 真的吗?之后你没有打Enter
  • getch() 不是 C 标准库的一部分;改用getchar();这不会改变你程序的行为,但未来你会非常感谢现在的你;而且,关于也按[ENTER] 的 cmets 和答案将是有意义的
  • @WhozCraig 在全新的 MS DOS 程序中使用 getch 的全部原因是跳过输入。

标签: c


【解决方案1】:

这是 Windows VS 15.7 _getch 实现中的一个已知错误,报告为 here

我可以用您的代码重现您的问题,只需按一个键。

【讨论】:

  • 我将原始问题保留为 getch() 而不是 _getch(),尽管两者在我的肉眼中表现几乎相同。
  • 为什么我需要包含conio.h?当前的代码 sn -p 足以重现该错误。
  • 只是因为假定未定义的函数在 C 中返回 int(自 C99 起不允许)。此外,main 返回类型也应该是int,因为标准不允许void。你的编译器在怜悯你。
【解决方案2】:

getch 函数读取任何字符,包括换行符等空白字符。

如果您按下 Enter 键,getch 将捕获它。

【讨论】:

  • 一些最近的 Windows 版本有一个错误版本的_getch。我可以在不按任何ENTER 键的情况下重现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
相关资源
最近更新 更多