C语言相关。关于getchar跳出while(1)死循环问题。

在while(1)这样的死循环中,要做到输入回车终止循环,如果使用getchar函数将如何编写?每次输出回车之后循环没有停止,只是把回车也当成输入的字符了,请问如何解决?如果是getch()就没事。
我的程序的部分是: while (1)
{
x=getch();
printf("%c",x);
if (x==13)
break;
getchar版的是:
while (1)
{
x=getchar();
if (x==13)
break;

通过getchar返回的值是10, 要使用 x==10 break;

下面是解释:
前几天,群里有人问getch()和getchar()的区别,原因是他键入enter后,前者返回13,而后者返回10。代码如下:

#include <stdio.h>
#include <conio.h>
int main()
{
int ch, cha;
ch = getch();
cha = getchar();
printf("ch=%d, cha=%d\n",ch,cha);
getch();
return 0;
}

ENTER ENTER

ch=13, cha=10

这里特别说明一下,这段代码是在windows平台下,才会产生如上所说的差异。原因是windows平台下ENTER键会产生两个转义字符 \r\n, 因此,getch()读到 \r 时就会返回他的ASCII码13。

奇怪的问题是为什么getchar()会返回10呢?前面不是说过返回第一个字符吗?

这的确会让人费解。实际上产生这个结果的原因是,getchar()把输入的 \r\n 转换成了 \n ,所以返回的是 \n 的ASCII码 10。为什么会这样呢?因为前面说过getchar()是C语言标准库函数,而在unix系统中ENTER键只产生 \n 。顺便说一下,在MAC OS中ENTER键将产生 \r ,同样也会被替换成 \n。这样,不管在什么平台下,getchar()都会得到相同的结果,所以说getchar()标准库函数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-02
把13 换成10就行了, 13 是'\r'.
我们按enter时会产生'\n'
第2个回答  2011-11-02
1

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网