c语言中scanf等函数关于输入流缓冲区

本文介绍了C语言中使用scanf和getchar函数时可能遇到的输入流缓冲区问题,当进行大量输入时,未清空的缓冲区可能导致程序行为异常。文章通过实例说明了缓冲区的工作原理,并提供了在Windows和Linux环境下清空输入流缓冲区的方法,包括使用和setbuf函数。
摘要由CSDN通过智能技术生成

突然想起来c语言中常用的scanf函数还有getchar函数有可能会遇到关于缓冲区未被清空导致输入出现问题的情况。

刚刚学c的时候有道练习题遇到了键盘输入缓冲区出现的问题,然后今天同学做课设题目也遇到了相同的问题老师居然一时没解答出来--。

回来看了下大概的解释,写下来算是作为记录吧。

相对于getche()getche(),scanf()和getchar()是stdioh库里的函数,像我这种初学c的基本上输入都用getchar()和scanf()来解决。然而遇到大量输入的话就可能出现问题--。比如

#include<stdio.h>
int main ()
{
  char c;
  while((c = getchar())!='\n')
        printf("%c",c);
 printf("end");
 return 0;
}

当你输入多个字符时这一段代码就会把你输入的一整串字符串都输出来,getchar()不是只读取一个字符吗--。

然而这并不是偶然.....

getchar()并不是从键盘直接读取字符,而是等你输入完成,比如输入一整串字符你会按个回车表示你输入完成了对吧,那么这个回车就是一个标志,从键盘读到回车符的时候程序才会进入getchar()这个函数,而你之前输入的东西都会被存放在内存中有一块叫输入流缓冲区的地方,任晗getchar()就开始在缓冲区读取字符,当它读完第一个字符后释放了那个字符所占的内存ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值