木的篆书怎么写:C语言编程问题

来源:百度文库 编辑:高校问答 时间:2024/05/05 12:21:07
#include <stdio.h>
void main()
{
char c;
for (;;)
{
c=getchar();
printf("%c",&c);
if (c=='y')
break;
}
}
我的问题是:在C语言中规定,getchar()只接收第一个字符,不管你输入多少都是接收第一个,而上面的程序为什么你输入几个字符就能输出几个字符呢?
请高手指教,满意后可以加分!!!

在C语言中规定,getchar()只接收第一个字符,不管你输入多少都是接收第一个

——不是这样的

getchar() 是需要行缓冲的,所以键盘输入后它不会立即返回,而直到输入回车以后,getchar 才会从缓冲区开头开始读(可能就是你说的只接收第一个字符),但是因为你的程序是无限循环的,所以缓冲区中的字符会被一个一个依次读出来。

这个.........lz是没仔细看吧。
另外有个问题,在printf里面那个应该是'c'而不是'&c'
getchar是在for循环内啊,只有当字符为小写的‘y’的时候才退出。
实际上getchar是从缓冲区中取出字符的,当你输入一串字符后回车,getchar的确是取第一个字符,但是当你在其后马上再次执行getchar时,就取第二个字符,第一个已经被取走了,所以才会发生上述现象。
也就是回车后依次取缓冲区中的字符并输出,直到字符中有‘y’为止。

你可以实验一下,比如定义几个字符变量,依次接受getchar的返回值,然后输出试试就知道了。还有,别忘了,换行也算字符,另外就是getchar如果取不到字符是不会罢休滴..........

你能提出这样的问题这说明你不理解循环的实质,循环其实是一个接着一个执行的,当程序执行循环内容时,判断该循环是否满足循环内部的终止循环条件,也就是你这里面的if (c=='y') break;语句,如果满足输入的是y的话则终止该循环。
再有要说明的是:getchar()是只接收第一个字符没错,但你定义的不是字符串,你定义的是单个的字符变量char c,而不是一个数组,当你输入某一字符或字符串时它只一个一个的检查,当检查到有字符y时它便终止循环。
我说的已经非常详细了,你明白了吗

yh198459说的对,

其实是死循环,而不是getchar()的问题。
程序体的含义是:
getchar()一次得到一个字母,然后比较这个字母是不是“y”,如果是就跳出循环,否则继续for循环,而for(;;)是个无限循环。

原因可能是这样的:
for (;;)
{
c=getchar();
printf("%c",&c);/*这一句应该写成:printf("%c",c);吧?*/
if (c=='y')
break;
}

for循环是个空语句。循环体的功能读入一个字符到c变量的存储单元中,再用函数printf输出读入的字符c。用if判断,当c=='y'时,用break结束循环。要不就成死循环了。所以你输入什么字符就输出什么字符,知道输入y为止。

featherwit 正解