码迷,mamicode.com
首页 > 编程语言 > 详细

c语言scanf被跳过的问题

时间:2018-05-26 10:43:31      阅读:669      评论:0      收藏:0      [点我收藏+]

标签:.com   计算机   二次   err   类型   http   一个   getchar   比较   

  在运行scanf函数时,scanf常常会被跳过。这是因为当你进行过了scanf函数后, 在第二次scanf函数时, 由于缓存区里依然存着第一次结束时送入的回车符,在第二次时没有读入就直接把回车符送入了,所以没有真正起到读入数据的作用。这个时候我们清除缓冲区就可以了,这里可以使用fflush函数。先来看一下fflush函数:技术分享图片

图中的流就是把计算机中的数据传输(数据的读写,网络连接的数据传输)抽象的表示为流,数据的传输就像流水一样,从一个容器流到另一个容器。流一般分为3种,标准输入(stdin),标准输出(stdout)和错误输出(stderr)。了解了这个函数和流之后,先看个例子,

技术分享图片

为什么明明是int类型我输入123cv呢?因为我们默认用户是不友好的,谁也不知道用户会干出什么事。这个时候可以看出,缓冲区的"c"直接被赋给了b变量。这里可以认为第二个scanf函数被跳过了,当然scanf被跳过不止这一种情况,看看加了fflush函数之后的结果:

技术分享图片

  加入了fflush没问题!

  不过还有一种方法,用getchar(),不过getchar只能跳过一个字符,如图:

技术分享图片

可以看到,这里字符“c”被跳过了。

所以在编程的时候碰到scanf被跳过了还是用fflush函数比较好。

 

c语言scanf被跳过的问题

标签:.com   计算机   二次   err   类型   http   一个   getchar   比较   

原文地址:https://www.cnblogs.com/liubenwei/p/9091785.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!