2014-02-20 40 views
1
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

'getch'是非标准且不可移植的。请使用'getchar'代替。 – ajay

回答

2

在一些系统中,“输入”实际上是两个字符无限时间:回车,然后换行。

+0

如果是这样,那么如何检查''\ n''的条件 – zee

+0

@zee在阅读您的更新之后,如Paul所述,getch是非标准的。如果你真的必须使用它,那么你已经知道它返回“Enter”时返回''\ r'',所以检查它。如果不是,你总是可以使用getchar()。 – Allbeert

1

结束线总是由'\n'在C表示,不管底层系统是否表示它作为\n\r\r\n,或别的东西。 '\n'的值在您的系统上可能为13。

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

getch()不是一个标准的C函数,所以谁知道你在用它做什么,但是当使用C标准I/O库时,你正在测试行尾,而不是某些特定的键如输入,然后通过测试'\n'来完成此操作。显然,如果你在一个文件上使用这些函数,那么谈论关键就没有任何意义。

+0

检查我更新的问题,你会知道我正在用'getch()'试图做什么' – zee

+0

我的意思是,我不知道'getch()'做了什么或它是如何工作的,因为它不是一个标准的C函数,而你没有提供任何细节。对于我来说,也许它不适合你,因为那个函数根本不读字符。 –

+0

然后它做什么? – zee

1

我假设你正在使用Windows操作系统。当您按时输入键,则'\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()?