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');
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');
结束线总是由'\n'
在C表示,不管底层系统是否表示它作为\n
,\r
或\r\n
,或别的东西。 '\n'
的值在您的系统上可能为13。
C不需要ASCII,但ASCII具有回车符和换行符。不要使用任何数字值,因为C不需要ASCII - 总是使用字符字面值'\n'
来实现可移植性。
getch()
不是一个标准的C函数,所以谁知道你在用它做什么,但是当使用C标准I/O库时,你正在测试行尾,而不是某些特定的键如输入,然后通过测试'\n'
来完成此操作。显然,如果你在一个文件上使用这些函数,那么谈论关键就没有任何意义。
我假设你正在使用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()?
'getch'是非标准且不可移植的。请使用'getchar'代替。 – ajay