赞
踩
目录
缓冲区的本质:一段内存
像scanf、getchar等这些输入函数,都是从“缓冲区”读入数据,而不是从“键盘”直接读入数据。
这些输入函数是从键盘上直接拿到数据吗?不是,而是要去中间的缓冲区里面去拿数据。
这个例子中缓冲区内存放的是 123456\n 其中scanf函数先从缓冲区读入123456,然后getchar函数再从缓冲区读入\n
解决方案:
方案一(弱鸡方案):在第10行输入getchar();
方案二(终极方案):在第10行以下输入
int tmp = 0;
while ((tmp = getchar()) != '\n')
{
;
}
getchar()一次只能读一个字符,如果输入了一行字符,getchar()读走第一个字符,而剩下的全留在缓冲区中。回车键也被当成字符储存于缓冲队列中,在下一个getchar()被读取,导致程序结果与预期结果不符。
getchar函数要读到一个回车符或文件结束符EOF才进行一次处理操作。
原因:getchar是以行(而不是字符)为单位读取字符。实际上是按文件的方式读取字符,而文件一般都是以行为单位的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。