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函数比较好。

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

时间: 2024-11-02 11:33:10

c语言scanf被跳过的问题的相关文章

c语言scanf详解

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式.其调用格式为:      scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF.其控制串由三类字符构成:1.格式化说明符: 2.

C语言scanf函数详解

函数名: scanf 功 能: 运行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.能够读入不论什么固有类型的数据并自己主动把数值变换成适当的机内格式. 其调用格式为:      scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成: 1.格

C语言scanf函数详细解释

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 其调用格式为:      scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成: 1.格式化说明

C语言scanf函数详细解释(转)

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 其调用格式为:      scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成: 1.格式化说明

哦这。。!C语言scanf输入的坑爹之处

一. 今天闲来无事,跑去A题,本想3sA了poj1004,结果搞了10分钟,最令人困惑的问题就是为什么定义了double类型的变量,但是用scanf输入的时候标识符用%f的话,输入并不能完成,也就是说输入不会起作用,后来查找资料,才知道,原来用double 输入的时候标识符是%lf,注意这里是L和F,不是1和f 经过修正终于搞定,分分钟A了这个水题. 然而后来再想 A 就A不过去了,,,,并不知道为什么.好吧,忽略这种细节,没什么难度的水题没必要太在意,代码如下: 1 #include<cstd

C语言scanf与get char,gets的区别

C语言scanf与get char,gets的区别 1.scanf() scanf是C语言的格式输入函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 在这里我想 列下一个'格式化说明符'的表来自于下面这个链接 (https://blog.csdn.net/21aspnet/article/details/174326) (A)                格式化说明符 格式字符           说明 %a 

C语言scanf执行时被跳过

运行到第二次开始游戏时,发现GameJudge函数中的scanf无法从键盘中输入数据 这种情况的出现是因为用户在输入结束时都会敲一下回车键才能让程序继续执行, 但是,每次printf会从用户输入缓冲区取出用户输入的内容,这样就会在缓冲区留下回车键, 下一次输入如果是获取一个字符,就会将缓冲区剩余的回车键取出. #include<stdio.h> #include<ctype.h> #include <stdlib.h> #include <time.h> #

C语言scanf输入格式 printf输出格式

对于刚接触C语言的同学来说 可能会遇到这个问题 因为博主也是个菜鸟经常因为搞不清楚单精度双精度还有输入输出格式的问题 就这个问题也百度的很多次 所以在这里总结一下分享给大家 printf输出格式 1.转换说明符       %a(%A)     浮点数.十六进制数字和p-(P-)记数法(C99)       %c             字符       %d             有符号十进制整数       %f              浮点数(包括float和doulbe)      

C语言Scanf函数

C语言的scanf函数 一.变量的内存分析 (一)字节与地址 ①. 内 存以字节为单位 每个字节都有自己的内存地址,根据地址就可以找到该字节.整个内存相当于一整个酒店,而酒店以房间为单位,在这里每个房间就相当于是每个字节,地址就是房 号,根据房号可以找到房间(根据地址也可以找到内存中的字节).相邻房间的房号是连续的,相邻字节的地址也是连续的.计算机中通常以十六进制表示地址. ②. 不同类型占用的字节是不一样的,数据越大则占用的字节数越多.如在64位编译器下,int类型占据4个字节,char类型占