| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1139 人关注过本帖
标题:有道二级题目,实在不明白,请高手指教
只看楼主 加入收藏
pearlangel
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-8-9
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:13 
有道二级题目,实在不明白,请高手指教
执行以下程序时输入1234567,程序的运行结果为()
#include<stdio.h>
main()
{int x,y;
scanf("%2d%21d",&x,&y);
printf("%d\n",x+y);
}
A.17           B.46            C.15             D.9
想问下详细原因,在执行时输入123456起什么作用,x,y的地址在哪儿呀,怎么取值?在下自学c语言,有很多问题不太明白,还希望各位高手多多指教
搜索更多相关主题的帖子: c语言 
2011-08-09 17:27
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 

应该是 %2d%2d  表示一次录入两位数作为一个整数的值

那就是录入了12 34  结果是46

                                         
===========深入<----------------->浅出============
2011-08-09 17:34
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:3 
          这个和x,y的地址没有关系,只是限定了x,y读取的值的位数。都设为两位所以依次读两位就OK
2011-08-09 17:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 3楼 loveshuang
指定要&符号就是要地址,人家问地址怎么回事很正常啊。

授人以渔,不授人以鱼。
2011-08-09 21:10
小曹
Rank: 2
等 级:论坛游民
帖 子:8
专家分:24
注 册:2010-3-8
收藏
得分:3 
x y 的地址是内存自动分配的, 不同意四楼观点。虽然是取地址符号没错,但是这个地址是无法预知的。楼主的程序是不是有问题?%2d%2ld是长整形还是笔误/

2011-08-09 21:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
回复 5楼 小曹
读坏书了不是,无法预知的,scanf()要传入地址干嘛?它拿这种地址怎么用的,你知道吗?

授人以渔,不授人以鱼。
2011-08-09 21:25
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:0 
回复 4楼 TonyDeng
这道题本来就和x,y的地址没有关系啊,xy的存储位置是定义的时候系统分配的,取地址只是为输入函数用。
2011-08-10 00:57
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:3 
这个东西怎么说?不好说啊,对于初学者来说,我觉得先记住就行了,这就是scanf输入时的一个特点,也可以看做是一种规定,至少这不妨碍你考过二级考试,看多了就习惯了,要想真正明白为什么会有这个取地址符,应该要学到深入才能真正明白吧。

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2011-08-10 07:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
楼主自学,能问出这个问题其实很聪明,有学编程的天赋。在程序代码中,同样是自动变量,我们见过x=123这样的赋值,123是常量,储存在某个固定地址中,当将这个地址的值赋给变量x的时候,我们没有使用&x来取x的地址,而是直接就这样写了。但在scanf()函数中,同样是赋值(右边的123是从键盘缓冲区地址取出来的),此时却要用到x的地址&x。这说明两种赋值方式是有区别的,能看得出有区别、问出来,是很敏锐的感觉。正因为是自学,他没有被权威和书本悠忽了,没有用书上教我们scanf()时就是这样写的来自我安慰,有这种寻根究底的精神才是真正的料子。

学习不是为了应付考试,题过了,不表明懂了,这是一个典型的例子。

授人以渔,不授人以鱼。
2011-08-10 09:37
asdf535463
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2011-8-10
收藏
得分:3 
%21d是长整数,1234567经过%2d%21d接收后就为12 34,所以是相加之后为46.
2011-08-10 10:01
快速回复:有道二级题目,实在不明白,请高手指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017461 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved