C语言关于scanf用法的问题

是这样一道题:设有定义:inta;floatb;执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0<回车>,a和b的值分别为(87和6.0... 是这样一道题:
设有定义:int a;float b;执行 scanf("%2d%f",&a,&b);语句时,若从键盘输入
876 543.0< 回车>,a和b的值分别为 ( 87和6.000000)

这是如何得出结果的呢?
1 scanf里规定了数值的宽度,如果实际输入的宽度要大于规定宽度,就会舍去多余的数字或符号么?如果是这样,就刚好和printf此种用法相反吧?
2 那个b值是怎么出来的呀,我只知道float型数据确实是有7为有效数字。但那个6的来路我实在是不清楚。

谢谢高手们的帮助~
展开
 我来答
lxc2lxy
2010-09-13 · TA获得超过346个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:49.9万
展开全部
记住一点,scanf认为遇到“非法输入”就结束。

scanf("%2d%f",&a,&b);中第一个格式控制字符2d的意思是读取2位,作为一个整数输入到给对应的变量a的地址中。输入876,当然只读取前2位87。这是2的作用,后面输入对于2来说,相当于非法输入。

对于%f,后面输入的是7 543.0,对于浮点型数据是不可能得到空格的,所以遇到空格,认为是非法输入,结束输入。所以b的值是6,即是6.000000
杨卓烨
2010-09-13 · 超过32用户采纳过TA的回答
知道答主
回答量:239
采纳率:0%
帮助的人:113万
展开全部
scanf认为遇到“非法输入”就结束
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Kumath
2010-09-13 · TA获得超过152个赞
知道答主
回答量:80
采纳率:0%
帮助的人:69.7万
展开全部
只有在需要格式输入和格式输出时,我们才要求写数字。(这样可以规范输入,同时可以按格式输出)。如果没有这方面的要求,直接去掉数字, 即可。另外 空格 表示下一个变量的读入。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我靠JJ又大了
2010-09-13 · 超过20用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:64.4万
展开全部
%2d---a:在876这个数字中取两位赋给a于是a=87,同时把876中的6自动划为下一个数字,%f---b把87后面的数字给b也就是6于是b=6
lz把2去掉就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式