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 让我再输入???
就是说 为什么我可以输入一个字符串之后 会输出字符串,而不是单个字符?
理解不了,求解! 展开
while(ch != EOF)
{
putchar(ch);
c = getchar;
}
这个列子。
比如我输入了 AB 给 c变量,然而用 getchar 的输入的方法不就是 只能够把 A 赋值给变量c 吗?
为什么 进入循环之后 并不是直接执行 putchar 函数输出 A
而是 输出了 AB???然后才跳到 getchar 让我再输入???
就是说 为什么我可以输入一个字符串之后 会输出字符串,而不是单个字符?
理解不了,求解! 展开
展开全部
“输入了 AB 给 c”-- 你的意思是你拍入了 AB回车。
实际上,你拍入的3个字符在输入流缓冲区。 getchar();一次到输入流缓冲区取一个字符,剩下的还在缓冲区。
下次getchar(); 仍到缓冲区取字符,于是取到B。再下次,getchar(); 将取到 回车。
---
getchar(); 并非直接到键盘取字符。而是只到输入流缓冲区取字符,缓冲区没东西时,它等待,有东西就抓来了。
实际上,你拍入的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 等待你输入。
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询