C语言,在循环中getchar和putchar的运用

c=getchar();while(ch!=EOF){putchar(ch);c=getchar;}这个列子。比如我输入了AB给c变量,然而用getchar的输入的方法不... c = getchar();
while(ch != EOF)
{
putchar(ch);
c = getchar;

}

这个列子。
比如我输入了 AB 给 c变量,然而用 getchar 的输入的方法不就是 只能够把 A 赋值给变量c 吗?
为什么 进入循环之后 并不是直接执行 putchar 函数输出 A
而是 输出了 AB???然后才跳到 getchar 让我再输入???

就是说 为什么我可以输入一个字符串之后 会输出字符串,而不是单个字符?
理解不了,求解!
展开
 我来答
金色潜鸟
2013-11-08 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5481万
展开全部
“输入了 AB 给 c”-- 你的意思是你拍入了 AB回车。

实际上,你拍入的3个字符在输入流缓冲区。 getchar();一次到输入流缓冲区取一个字符,剩下的还在缓冲区。
下次getchar(); 仍到缓冲区取字符,于是取到B。再下次,getchar(); 将取到 回车。
---
getchar(); 并非直接到键盘取字符。而是只到输入流缓冲区取字符,缓冲区没东西时,它等待,有东西就抓来了。
追问
那么说 
我可不可以理解为 输入A给 C变量的时候,还没有执行putchar 函数?

而是 跳到了最后一个getchar; 继续输入之后,直到 输入 缓冲区里的全部字符
才会在屏幕上 输出?= =
追答
一步一步执行:
(1)拍入A时 getchar 并未开始读字符,因为输入流缓冲区里没东西。
拍入B时 getchar 并未开始读字符,因为输入流缓冲区里没东西。
拍入回车,状态开始变化:AB回车3个字符从键盘缓冲区送往输入流缓冲区,于是输入流缓冲区里有东西了。
c = getchar(); 从输入流缓冲区里取1个字符,赋给c. 剩余 B回车2个字符在输入流缓冲区。
(2)
while(c != EOF) // c 里是 A , 不等于EOF,条件满足,进入循环体
{
putchar(c); // 输出 A
c = getchar(); // 从输入流缓冲区里取字符B,赋给c. 剩余 回车1个字符在输入流缓冲区。
}
(3)
while(c != EOF) // c 里是 B, 不等于EOF,条件满足,进入循环体
{
putchar(c); // 输出 B
c = getchar(); // 从输入流缓冲区里取字符回车,输入流缓冲区空了。
}
(4)
while(c != EOF) // c 里是回车 , 不等于EOF,条件满足,进入循环体
{
putchar(c); // 输出 回车
c = getchar(); // 输入流缓冲区里没有东西,getchar 等待你输入。
}
eyebhp
2013-11-08
知道答主
回答量:49
采纳率:0%
帮助的人:27万
展开全部
话说,你用于判断的变量是ch,而获取字符的是c,输出字符的又是ch,你确定能达到你说的效果么。。。
更多追问追答
追问
= =那里我写错了,不要注意这些细节。。。问题还是一样的~
追答
好吧,其实EOF是End Of File的缩写,它的值为-1,而A(65)、B(66)和回车符(13)明显不等于-1,所以会一直循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式