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');
答案 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 return
或CR
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()?