关于while( (c = getchar()) != EOF )请问
关于while( (c = getchar()) != EOF )请教
最近在看K&R的书 但是对while( (c = getchar()) != EOF )还是不是很懂
例如
while( (c = getchar()) != EOF )
{
purchar(c);
}当输入abc的时候为什么会输出abc getchar和putchar不是都是对单个字符进行操作的吗?
getchar函数在内部到底是怎么去做的?? 还有输入缓冲区到底是什么?是不是还有一个什么键盘的缓冲区??
------解决方案--------------------
getchar是标准I/O函数,他们是带有缓冲区的,在这些函数的内部会使用“系统调用”来接受数据。在碰到回车时,这个函数才返回,此时你从键盘上输入的字符已经全部在它内部的缓冲区中了。注意你返回的只是一个字符,这个字符也就是你输入的第一个字符,缓冲区的第一个。然后你再次调用getchar(),它会判断缓冲区中是否已有数据,如果有数据就读取缓冲区的第一个字符,然后返回。这样依次下去,直到缓冲区为空,才会等待你输入数据。这就是为什么你输入abc会打印abc而不是
a
b
c
。解释完毕
------解决方案--------------------
因为c保存的就是abc的第一个字符,即,c的值一直就是a,因此调用一次putchar(c)就输出一个a
最近在看K&R的书 但是对while( (c = getchar()) != EOF )还是不是很懂
例如
while( (c = getchar()) != EOF )
{
purchar(c);
}当输入abc的时候为什么会输出abc getchar和putchar不是都是对单个字符进行操作的吗?
getchar函数在内部到底是怎么去做的?? 还有输入缓冲区到底是什么?是不是还有一个什么键盘的缓冲区??
------解决方案--------------------
getchar是标准I/O函数,他们是带有缓冲区的,在这些函数的内部会使用“系统调用”来接受数据。在碰到回车时,这个函数才返回,此时你从键盘上输入的字符已经全部在它内部的缓冲区中了。注意你返回的只是一个字符,这个字符也就是你输入的第一个字符,缓冲区的第一个。然后你再次调用getchar(),它会判断缓冲区中是否已有数据,如果有数据就读取缓冲区的第一个字符,然后返回。这样依次下去,直到缓冲区为空,才会等待你输入数据。这就是为什么你输入abc会打印abc而不是
a
b
c
。解释完毕
------解决方案--------------------
因为c保存的就是abc的第一个字符,即,c的值一直就是a,因此调用一次putchar(c)就输出一个a