c语言scanf被跳过的问题

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

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

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

  加入了fflush没问题!

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

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

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

猜你喜欢

转载自www.cnblogs.com/liubenwei/p/9091785.html