【问题标题】:Inputting an esc char stores a decimal value of 10, when It should be showing a value of 27输入 esc char 存储十进制值 10,当它应该显示值 27
【发布时间】:2016-11-07 17:27:29
【问题描述】:

当我运行以下代码时:

#include <stdio.h>
#include <stdlib.h>

void main()
{
    int ESC;
    ESC = getchar();
    printf("\n%d", ESC);
}

它打印的值是“10”,但 ascii 表指出它应该有一个值“27”。我也使用 scanf 尝试过,但得到了相同的结果。怎么回事?

【问题讨论】:

  • ESC 未被getchar() 读取。您看到的是按 ESC 后按 RETURN 时的换行符。
  • ESC 的类型应该是int,因为getchar() 返回int。按“ESC”,然后按 Enter。这应该确保在“返回”之前读取“ESC”。
  • 我们需要有关您正在使用的操作系统/终端类型的更多详细信息/任何希望告诉您为什么会发生这种情况。 esc 按键很可能永远不会进入您的程序。
  • 你正在使用void main(),所以我猜你在Turbo C下,conio.h中的getch就是你要找的。​​span>
  • 成功了,谢谢。

标签: c windows ascii scanf getchar


【解决方案1】:

我发现如果我使用库#include &lt;conio.h&gt;,然后使用getch()函数,就可以完美运行。

#include <stdio.h>
#include <conio.h>

void main()
{
    int ESC;
    ESC = getch();
    printf("%d", ESC);
}

【讨论】:

  • 仅供参考,使用 Windows 和 MSVC,当输入 Esc 时,您的原始程序确实返回 10,但奇怪的是,如果您输入 Ctrl+[,它应该与输出预期的 27 相同。所以我的猜测是 key 被忽略了,而不是它的结果值,尽管在 getchar 的 MS 手册页中没有任何内容。
  • 你不应该使用conio.h。它是来自非常古老的编译器(如 Borland 的 DOS 编译器)的非标准头文件。从已经过时 20 年的编译器学习非标准特性并不是特别有用。
猜你喜欢
  • 2013-02-02
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
相关资源
最近更新 更多