关于输入输入密钥

时间:2014-02-20 17:12:40

标签: c ascii enter

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');

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

无论基础系统是将其表示为'\n'\n还是\r还是其他内容,行尾都始终由C中的\r\n表示。 '\n'的值在你的系统上可能是13。

C不需要ASCII,但ASCII具有回车符和换行符。不要对其中任何一个使用数值,因为C不需要ASCII - 总是使用字符文字'\n'来实现可移植性。

getch()不是标准的C函数,所以谁知道你正在尝试用它做什么,但是在使用C标准I / O库时,你正在测试行尾,而不是对于某些特定键,例如 Enter ,您可以通过测试'\n'来实现。显然,如果你在文件上使用这些功能,那么谈论密钥是没有意义的。

答案 2 :(得分:1)

我假设您使用的是Windows操作系统。当您按输入键时,'\r'功能会读取carriage returnCR getch字符。见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()?