首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 教育频道
学院论坛 | 推荐专题 | 专家答疑 | Flash剧场 | Photoshop | 名词解释 | 梦幻桌面 | PS高手进阶 | QQ区 | 壁纸 | 黑客教材
Flash教程| 动画制作 | AutoCAD  | 3DMax专区 | PS视频教程| 网页制作 | CorelDRAW| Firework | 滤镜与实例 | 全部视频教程
学院热点专题
|21互联专区| 照片处理 | QQ 动画 | 系统优化 | 会声会影 | 制作游戏 | Win2003 | 大话成语 | MSN专题 | 头条
| 天音听听 | QQ 技巧  | ASP教程 | 菜鸟入门 | 实用工具 | ADSL宽带 | 硬盘世界| BT  下载 | Vista  | 问吧
 欢迎各出版社以及作者与我们联系发布电子版书籍.电子邮件:
book@mail.enet.com.cn
 
书名:捉 虫 历 险 记
作者:(美) Steve Oualline
来源:清华大学出版社
ISBN:ISBN 7-302-07679-0/TP·5624
页数:805
开本:185×260
出版时间:2003
定价:36.00
  本书采用幽默通俗的语言帮助读者从其他程序员的失误中吸取教训,从而减少自己程序中的错误。全书共分为三大部分:第Ⅰ部分列举了114个不同类型、含有bug的程序代码,;第Ⅱ部分给出了第Ⅰ部分114个bug程序代码所涉及的问题的提示;第Ⅲ部分给出114个bug程序代码所涉及问题的答案。

第2章 初 级 错 误
我们大家曾经都是编程新手,为编写一个最简单的可编译程序常常要花费几个小时的时间。但是,由于经验和水平有限,仍然要犯很多愚蠢的错误。现在,我们都已成为了专业的程序员,不会再犯一些明显的低级错误。然而,却还会犯一些“高级”的错误,这些错误也被称之为“专业错误”。

本章列出了许多程序,以期望帮助大家回顾早期常犯的编程错误,这样也可以让大家重温自己已经忘记的编程体验。

2.1 程序4:典型的初始化问题
一个典型的数学问题就是从1一直加到100。下面这个程序用于完成此任务,但其结果好像是错误的:

1 /************************************************

2 * A program to sum the numbers from 1 to 100 ????????? *

3 * using a brute force algorithm. ? *

4 ***********************************************/

5 #include <iostream>

6

7 int main()

8 {

9 int sum; // The running sum

10 int count; // The current number

11

12 for (count = 1; count <= 100; ++count)

13 sum += count;

14

15 std::cout <<

16 "The sum of the numbers " <<

17 "between 1 and 100 is " <<

18 sum << '\n';

19 return (0);

20 }

(请参见“提示116”和“答案51”)

花絮

一家电子装配公司面临着失窃的问题,成千上万个电子零件不翼而飞。该公司制定了许多安全措施,但仍然无法阻止零件被盗。大家都在纳闷:这些零件究竟去哪里了呢?

最后,公司的守门人解开了这个迷。当他爬上电线杆更换公司的照明灯时,恰巧看到3个鸟巢。原来,是鸟儿们叨走工厂地板上的零件并使用它们构建自己的巢穴。据估计,这些鸟巢每个价值1万美元。

2.2 程序5:早期错误
每一个初级程序员刚开始都是学习简单的表达式以及如何输入结果。下面这个程序非常简单,但是其中却存在一个问题:

1 /************************************************

2 * A program to answer the question of a five ? ? ? *

3 * year old: ?? ? *

4 * "What is 2 + 2?" ? ??? *

5 ************************************************/

6 #include <iostream>

7

8 int main()

9 {

10 int result; // Result of the addition

11

12 result = 2+2;

13 std::cout << "The answer is " << result;

14 return (0);

15 }

(请参见“提示251”和“答案43”)

花絮

一个聪明的程序员曾提出了一个窃取银行存款的好方法。他从每个存款人那里窃取了大约0.5分。当银行结算利息时,其结果往往并不是一个整数。例如,利息有可能是3.2分或8.6分。银行会按惯例对该利息进行四舍五入,所以3.2分就变成了3分,8.6分就变成了9分。这样的结果就是有一半存款人的利息增加了,而另一半存款人的利息减少了。所以最终的利息总额是持平的。

一个骗子程序员改变了这种算法,使这种算法只进行舍位操作。于是3.2分就变成了3分,8.6分就变成了8分。这样就会剩下一些数额不等且少于1分的零钱。该程序员就把这些零钱收集起来并把它们添加到账户列表中最后一个人的账户上。而此前他已经以ZZYMOCK的名字开了一个账户,这个账户是他自己的,而且会排在银行账户列表的底部。

这个骗子程序员非常聪明,他从每个人那里窃取了不到1分的余额,且没有人发现。毕竟,几乎没有人会检查他们利息中小数点之后最后的余额,甚至很少有人曾经检查过自己的利息。

但是这个家伙还是被抓了。他又以ZZYSKI的名字开了一个账户,现在这个账户排在银行账户列表的底部。当他第一次接到传单时,非常惊奇地发现,他被指控在其200美元的账户上却获得38 238.83美元的利息。

2.3 程序6:必须为程序保留“空间”
下面是一个简短的实际程序,它由一个刚刚学会如何编程的人编写。该程序设计用于打印一个简单的答案。但是,事情并没有按照预想的方式进行。

1 /************************************************

2 * Double a number. *

3 ************************************************/

4 #include <iostream>

5

6 int main(void)

7 {

8 int number; // A number to double

9

10 std::cout << "Enter a number:";

11 std::cin >> number;

12

13 std::cout << "Twice" << number << "is" <<

14 (number * 2) << '\n';

15 return (0);

16 }

(请参见“提示247”和“答案23”)

花絮

我曾讲授过一段程序设计课程。那时,我对教学了解得不是很多,不知道给学生安排多少家庭作业为好。一次,我被Fort Worth警局的一位警察拦住,就因为我安排的家庭作业太难太难。这不是个故事,而是一件真实的事情。

一天,我正在Fort Worth的大街上赶路,因为红灯而停下来,这时一个警车停在我的身边。我看看警官,他也看了我一会儿,然后用手示意我摇下车窗玻璃。我那时的确有些担心,因为我当时驾驶着本应回收的‘58 Chevy,而且消声器已经失灵3次。

我按照要求摇下车窗玻璃,警官俯下身对我大声说:“Steve,本周您布置的家庭作业太难!”那时,我才知道,我的一个学生为Fort Worth警局工作。不用说,我后来将学生上交家庭作业的时间延长了一周。


本书目录
常见C++ Bug大围剿
程序2:老师的问题
清晨的惊奇
典型的初始化问题
错误的平方
蹩脚的除法运算
问题程序
Hello World程序
计算字符个数
过于简单的除法
关于零的错误
关于位的小故障
未考虑分制
程序的故障点
幼儿园算术修订版
关于位的另一个故障
Microsoft的缺陷
容易中断的链接
最大值混乱
无法读取文件
慢吞吞的字典
姓名游戏
误算
不能同步
求和问题
不是指针类型
平方错误
总计错误
快速退出
数组消失的情形
超长队列
另类异常
文件输出错误
堆栈错误
文件名游戏
速度杀手
发送错误消息
控制调试器
幻影文件
再现Hello
每周龙虎榜
★★★★★
  本书从软硬件方面着手,介绍网络基础和原理。
★★★★
  本书用诙谐幽默的语言介绍了搜索引擎的使用。
★★★
  本书通过实例讲解,让您在复杂的职场中轻松应对。

热门关键字:手机 | 笔记本 | MP3 | 移动存储 | 数码相机 | 数码摄像机 | 显示器 | 学院 | 软件下载 | 游戏 | IT女性 | 方案库

关于eNet | 广告服务 | 我们的产品 | 使用版权 | 投稿指南 | 诚邀加盟 | 联系我们

网站合作、内容监督、商务咨询:010-65245588
对本站有任何建议、意见或投诉,请点这里在线提交
Copyright © 1998--2007 硅谷动力公司版权所有

未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
【声明】本网站部分内容属论坛网友发布,本网站仅提供网友交流平台,但有权在本网站
范围内引用、发布、转载来自论坛网友发布的内容。网友发布内容纯属个人行为,与本网
站立场无关。本网站对于论坛网友发布的内容所引发的版权、署名权的异议及纠纷,不承
担任何责任。其他媒体转载须事先与原作者和本网站联系。
京ICP证000044