永发信息网

C语言中清空缓冲区问题

答案:2  悬赏:0  手机版
解决时间 2021-03-11 08:01
  • 提问者网友:姑娘长的好罪过
  • 2021-03-10 16:23
本人初学者,先谢谢大家了,
清空缓冲区不为什么不直接用scanf("%*c");
前面还要加scanf("%*^[\n]");
最佳答案
  • 五星知识达人网友:等灯
  • 2021-03-10 18:00
奇怪的问题!
scanf中*的作用之一是忽略掉指定的内容, 比如 scanf ("%d %*s %d", &i, &k),输入12 aaa 34,执行后i = 12, k = 34, aaa被忽略掉。这个与缓冲区有关系吗?
scanf ("%*”, buf); //这条语句忽略掉输入的任何字符(\n不忽略)。
至于这条语句scanf("%*^[\n]");连\n也忽略掉了, 程序直接终止在scanf,唯一的方法就是发送sigkill信号终止程序了。
全部回答
  • 1楼网友:忘川信使
  • 2021-03-10 19:04
1、flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃 fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。 2、scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。 ① 遇空格、“回车”、“跳格”键。 ② 遇宽度结束。 ③ 遇非法输入。 键盘缓冲区就可能有残余信息问题。 scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中 解决就要在scanf()函数之后加个fflush(stdin)。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯