帮忙看一下一道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,不过我不知是怎么算的 展开
#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,不过我不知是怎么算的 展开
展开全部
输出102030,因为printf函数中的格式控制符%d中间没有空格,所以它会接连输出三个数.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果应该不是10300吧,在C中"*"是输入赋值抑制字符,表示该格式说明要求输入数据,但不赋值,也就是在地址列表中没有相对应的地址项.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%d%*d%d",&i,&j,&k); 中的
%*d因为格式错误,导致第二个数的数值
20并没有被&j的地址收到,&j的地址收到
的是第三个数30,而&k的地址保存的
是原来的数值0,把三个数连续输出不是
10300么?你把最后一句改为;
printf("%d,%d,%d",i,j,k);
就可以知道三个数的数值了.
%*d因为格式错误,导致第二个数的数值
20并没有被&j的地址收到,&j的地址收到
的是第三个数30,而&k的地址保存的
是原来的数值0,把三个数连续输出不是
10300么?你把最后一句改为;
printf("%d,%d,%d",i,j,k);
就可以知道三个数的数值了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上看下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没有得到赋值。
上机测试的结果的确是10300,如smaily521所说%*d是一个抑制输入的操作,也就是这个%*d是用来占位的(不知道这样说是否准确,请达人指点)。20的确被扫描进内存了但是scanf并没有把它赋给任何变量(看下这句:The field is scanned but not stored.)。后面的30被做为第二个数赋给了j,因为已经达到了预先设定的输入数,所以k没有得到赋值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询