| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1139 人关注过本帖
标题:有道二级题目,实在不明白,请高手指教
只看楼主 加入收藏
pearlangel
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-8-9
收藏
得分:0 
回复 6楼 TonyDeng
还真不知道,跟我说说喽
2011-08-10 12:23
pearlangel
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2011-8-9
收藏
得分:0 
回复 5楼 小曹
是长整型
2011-08-10 12:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是写scanf()函数的作者的事,他只是从键盘缓冲区(其实是一个字符串数组)中取出一段貌似整数(取什么数在扫描第一个格式串时判断,此处%2d是要求取两位整数,就提取2个字符转换成整数)的数据,填到对应的地址(&a1)中,这个填写过程是不管&a1是不是真的是储存整数的地址的,也不管这个地址是不是真的能容纳这个长度的数据的。也就是说,scanf()函数没有进行类型检查就填写数据,这是这个函数最容易出错的原因所在。除非是程序设计者本人(只有他自己才知道回避什么情形),若使用这个函数设计程序然后交付给别人使用,不出问题的概率接近零。

[ 本帖最后由 TonyDeng 于 2011-8-10 14:09 编辑 ]

授人以渔,不授人以鱼。
2011-08-10 12:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
2楼的解释是正确的。123456在这里所起的作用,就是那个缓冲区的字符串,scanf()函数根据格式字符串指示,按照"2d"取出2个字符(即"12")转换为整数12放入x的地址中作为x的值,再根据紧接着的"2ld"取出紧接的2个字符(即"34")转换为长整型数34L放入y的地址中作为y的值,则x+y的计算结果自然是12+34=46。

注意:剩下的"56"作为残余数据留在键盘缓冲区中,如果有下一个scanf()函数调用,就会将残余数据读入,此时不用你敲键盘,scanf()已经收下数据了。这就是为保险起见,使用scanf()前先清空键盘缓冲区的原因。不过,这仅仅是治理scanf()诸多后患的措施之一,事实上,用这个函数的错误,防不胜防。

授人以渔,不授人以鱼。
2011-08-10 14:19
快速回复:有道二级题目,实在不明白,请高手指教
数据加载中...
 
   



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

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