【问题标题】:regarding inputing enter key关于输入回车键
【发布时间】:2014-03-21 19:32:06
【问题描述】:
char ch;
ch=getch();
printf("%d",ch);

当我输入enter key 时显示的输出是

13

但是换行的ascii码是10,为什么会显示13呢?

以下代码在输入enter key 时无限运行

char *ch=malloc(100);
do
{
    *ch=getch();
     ch++;
}while(*(ch-1)!='\n');

【问题讨论】:

  • getch 是非标准且不可移植的。请改用getchar

标签: c ascii enter


【解决方案1】:

在某些系统中,“Enter”实际上是两个字符:回车后跟换行。

【讨论】:

  • 如果是这种情况那么如何检查'\n'的情况
  • @zee 阅读您的更新后,正如保罗所说,getch 是非标准的。如果你真的必须使用它,那么你已经知道它在“Enter”上返回 '\r',所以请检查一下。如果没有,您可以随时使用 getchar()。
【解决方案2】:

在 C 中,行尾始终由 '\n' 表示,无论底层系统是否将其表示为 \n\r\r\n 或其他。 '\n' 的值在您的系统上可能是 13。

C 不需要 ASCII,但 ASCII 有一个回车符和一个换行符。不要对它们中的任何一个使用数值,因为 C 不需要 ASCII - 始终使用字符文字 '\n' 以实现可移植性。

getch() 不是标准的 C 函数,所以谁知道你想用它做什么,但是当使用 C 标准 I/O 库时,你测试的是行尾,而不是一些Enter 之类的特定键,您可以通过测试 '\n' 来做到这一点。显然,如果您在文件上使用这些功能,那么谈论键是没有任何意义的。

【讨论】:

  • 检查我更新的问题,你就会知道我想用getch()做什么
  • 我的意思是,我不知道getch() 是做什么的,也不知道它是如何工作的,因为它不是标准的 C 函数,你也没有提供任何细节。据我所知,也许它对您不起作用,因为该函数根本不读取字符。
  • 你需要告诉我,这是你的职责。我熟悉的唯一getch() 函数是ncurses 库中的函数。我知道有一些过时的 Borland 编译器一次支持另一个同名函数。
【解决方案3】:

我假设您使用的是 Windows 操作系统。当您按 enter 键时,'\r' 字符也称为 carriage returnCRgetch 函数读取。见key-codes。您正在将此与换行符 '\n' 进行比较,后者显然评估为 false 并且您继续循环。所以你应该这样做:

char *ch = malloc(100);

// check ch for NULL
do {
    *ch = getch();
     ch++;
} while(*(ch-1) != '\r');  // compare with carriage return

'\r' 的 ASCII 值是 13,这解释了你的输出。getch 函数不是标准的,也不是可移植的。此外,它已被弃用。您应该改用标准的getchar 函数。此外,请阅读此内容 - Why doesn't pressing enter return '\n' to getch()?

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2015-02-17
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多