C语言里面的函数 ungetc()在什么情况下会返回EOP?

我先是用getchar()读取了两个字符,是回车,然后执行ungetc(a,stdin);和ungetc(b,stdin);a,b都是char类型的,执行第二个的时候失败... 我先是用getchar()读取了两个字符,是回车,然后执行ungetc(a,stdin);和ungetc(b,stdin);a,b都是char类型的,执行第二个的时候失败了,返回了-1,即EOP,而如果我输入123之类的字符就能够成功返回输入流
难道这个函数处理回车和处理可显示字符不一样?
#include <stdio.h>
int main()
{
char a,b;
int i,j;
a = getchar();
b = getchar();
i = ungetc(b,stdin);
j = ungetc(a,stdin);
printf("%d %d\n",i,j);
return 0;
}
我输入0,回车,输出的是10,48,而我输入回车,0,回车,输出的是48,-1
麻烦高手替我解答一下疑惑
展开
 我来答
White_MouseYBZ
推荐于2016-11-27 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6624万
展开全部
ungetc(b,stdin)成功时返回b。如果b没有被返送进输入缓冲区或根本没有读字符则失败,返回EOF。输入0、回车,则a='0',b='\n',都反送成功时i=ungetc(b,stdin)返回的是b,即'\n'=10(用getchar读取的'\n'的ASCII是10),同样j=48,'0'的ASCII是48。当输入回车、0、回车时,因为最后一个回车还留在输入缓冲区的行首,那么a接收到的回车就不能再被送回缓冲区,所以返回-1。
追问
是不是这个函数对回车的处理方式不一样?这样的话,输入1,0,回车,最后一个回车也应该还在输入流中中啊,怎么这个可以返回成功?
追答
你对输入缓冲区了解吗?输入1、0、回车后,回车是留在缓冲区,这时返送回缓冲区的是1、0,而不是'\n',它们可以放在'\n'的前面。但不可能在一个'\n'前再放一个'\n',因为输入缓冲区一行只能有一个回车;如果'\n'在行首,那这一行就是空行,不允许再有'\n'在这一行出现。关于这个问题你在网上找找有人对^Z的研究文章。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式