帮忙看一下一道C语言填空题

以下程序运行时若从键盘上输入:102030<回车>,输出结果是什么?#include<stdio.h>main(){inti=0,j=0,k=0;scanf("%d%*d... 以下程序运行时若从键盘上输入:10 20 30<回车>,输出结果是什么?
#include<stdio.h>
main()
{int i=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);
printf("%d%d%d",i,j,k);
}
答案是10300,不过我不知是怎么算的
展开
 我来答
百度网友9c9a69e
2007-03-30 · TA获得超过198个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:0
展开全部
scanf("%d%*d%d",&i,&j,&k); 中的*号本没有错,C中就是有这个的.表示跳过一个输入.所以j 赋过的值不是20,而是30了.因为跳过了一个嘛.而k 就没有赋值.所以还是0
用printf("%d%d%d",i,j,k); 输出的时候,i为10j为30,k为0输出语句的原因,所以输出是连续的了.在printf中加些空格就可以了.这些数就不会连在一起了.
百度网友ad42aaa
2007-03-30 · 超过39用户采纳过TA的回答
知道答主
回答量:119
采纳率:0%
帮助的人:0
展开全部
输出102030,因为printf函数中的格式控制符%d中间没有空格,所以它会接连输出三个数.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
smaily521
2007-03-30
知道答主
回答量:15
采纳率:0%
帮助的人:0
展开全部
结果应该不是10300吧,在C中"*"是输入赋值抑制字符,表示该格式说明要求输入数据,但不赋值,也就是在地址列表中没有相对应的地址项.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e54bfe29f
2007-03-30 · TA获得超过528个赞
知道答主
回答量:171
采纳率:0%
帮助的人:0
展开全部
scanf("%d%*d%d",&i,&j,&k); 中的
%*d因为格式错误,导致第二个数的数值
20并没有被&j的地址收到,&j的地址收到
的是第三个数30,而&k的地址保存的
是原来的数值0,把三个数连续输出不是
10300么?你把最后一句改为;
printf("%d,%d,%d",i,j,k);
就可以知道三个数的数值了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
负家子弟
2007-03-30 · TA获得超过3567个赞
知道大有可为答主
回答量:1336
采纳率:0%
帮助的人:1449万
展开全部
楼上看下MSDN中的这段,你还认为%*d是格式错误吗?An asterisk (*) following the percent sign suppresses assignment of the next input field, which is interpreted as a field of the specified type. The field is scanned but not stored.

上机测试的结果的确是10300,如smaily521所说%*d是一个抑制输入的操作,也就是这个%*d是用来占位的(不知道这样说是否准确,请达人指点)。20的确被扫描进内存了但是scanf并没有把它赋给任何变量(看下这句:The field is scanned but not stored.)。后面的30被做为第二个数赋给了j,因为已经达到了预先设定的输入数,所以k没有得到赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式