scanf()后用gets()出现跳过……求详细的解释……

scanf()后用getchar()把回车吃掉可以解决……我想知道为什么。求scanf()的具体原理啊~为什么缓冲区里的回车会保留?呵呵,还不是很明白啊……为什么就只有s... scanf()后用getchar()把回车吃掉可以解决……我想知道为什么。求scanf()的具体原理啊~
为什么缓冲区里的回车会保留?
呵呵,还不是很明白啊……为什么就只有sanf()里输入的回车会被gets()接受呢?为什么那最后一个字符——回车会被保留在缓冲区呢?之前的字符都没传递给gets()。只有回车会被下面接受。我想知道scanf()函数的运行原理(在输入字符串时)~
展开
 我来答
L_o_o_n_i_e
推荐于2016-02-08 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5145万
展开全部
缓冲区里保留所有从键盘打入的键,包括空格,空白键,回车。
输入语句 scanf(),gets(), ...都是到 缓冲区 里 按语法规则 读东西,转换内容。
当 缓冲区 里 内容 用完了,或不够 输入语旁带句 用 时,输入语句 等待....。

从键盘打入的东西,只有当遇到 Enter 键 时,才 通过 操作系统 进 缓冲区,没遇到 Enter 键不进 (或者说scanf(),gets(), 等语句,没遇到 Enter 键输入事件发生时,不开始工作)。

空白和回车何时被用掉与读语句种类和读法读的格式有关。
gets() 是读一行字符串,包括在前在后在半当中的 空格,空白,....
scanf("%d",&k); 和 scanf("%d\n",&k); 不同。后者可以吃掉一个 Enter 键。

简单保险的办法是用 fflush(stdin); 清除 输入缓冲区。你就 不用担心 输入行运枯芦 残留 的数字,字符,空白败厅和Enter 键:
scanf(。。。); fflush(stdin); 再 gets();
徐光猪
2011-01-01 · TA获得超过4167个赞
知道大有可为答主
回答量:1299
采纳率:50%
帮助的人:1725万
展开全部
其实不是故意把回车留住桐派晌,每一个字符输入字符输入局锋之后都会进入一个缓冲区,回车也是字符,就是ASCII码,getchar就是接受一个字符羡蚂,自然可以接收回车的输入
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式