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

在while(1)这样的死循环中,要做到输入回车终止循环,如果使用getchar函数将如何编写?每次输出回车之后循环没有停止,只是把回车也当成输入的字符了,请问如何解决?... 在while(1)这样的死循环中,要做到输入回车终止循环,如果使用getchar函数将如何编写?每次输出回车之后循环没有停止,只是把回车也当成输入的字符了,请问如何解决?如果是getch()就没事。
我的程序的部分是: while (1)
{
x=getch();
printf("%c",x);
if (x==13)
break;
getchar版的是:
while (1)
{
x=getchar();
if (x==13)
break;
展开
 我来答
松甜恬0Je4ba
推荐于2017-09-22 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3461万
展开全部
通过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()标准库函数。
furious_tauren
2011-11-02 · TA获得超过4056个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:771万
展开全部
把13 换成10就行了, 13 是'\r'.
我们按enter时会产生'\n'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-11-02
展开全部
1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式