scanf,gets,与getchar

123向前走走 2019-03-10 10:19:21
当scanf一个字符串之后回车被存储到缓冲区,但是当回车没有被getchar(),而进行下一次的字符串scanf会正常进行,为甚么,不是scanf会从缓冲区读取数据,遇到回车为什么没有结束运行。
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2019-03-11
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。

123向前走走 2019-03-10
  • 打赏
  • 举报
回复
是不是sacnf在输入的时候会将数据前面所有的回车空格Tab全部清除
@风轻云淡_ 2019-03-10
  • 打赏
  • 举报
回复
只知道scanf 做了一些处理,可以自动处理你说的这个缓冲区存有回车的问题,但具体怎么处理的估计要看实现原理了。
marwi_study 2019-03-10
  • 打赏
  • 举报
回复
建议可以用fflush(stdin)来清除缓冲区的所有符号,这个可以预防在缓冲区有一些多余的\n和空格
六道佩恩 2019-03-10
  • 打赏
  • 举报
回复
这一个scanf是结束了,但下一个scanf仍然需要缓冲区,如果需要的是%c,那么就会把这个回车接收掉,如果是%s、%d、%f,开头遇到回车就会忽略。比如两个scanf(“%d”,%a), 输入“123\n”,第一个scanf接收123,缓冲区还剩“\n”,遇到第二个scanf,它看到缓冲区有东西,就会尝试接收,但自己需要的是%d,遇到的是\n,于是它就丢掉\n,缓冲区啥也没剩了,它看到缓冲区没东西了,于是又停下来等待你输入。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧