首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 教育频道
学院论坛 | 推荐专题 | 专家答疑 | 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.7 程序10:蹩脚的除法运算
这是一个简单的程序,设计用于指出浮点数的有效位数。意图很简单:选择一个循环分数,例如1/3 (0.333333)并打印它,看看能获得多少有效数字。然而,结果让程序员感到迷惑。他知道,计算机不可能如此麻木地进行重复计算。那么,出现了什么错误呢?

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

2 * divide -- Program to figure out how many ? *

3 * digits are printed in floating point ?*

4 * by print 1/3 or 0.333333. ???????? ?????????????????? *

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

6 #include <iostream>

7

8 int main()

9 {

10 float result; // Result of the divide

11

12 result = 1/3; // Assign result something

13

14 std::cout << "Result is " << result << '\n';

15 return (0);

16 }

(请参见“提示292”和“答案27”)

花絮

一个用于气象预报的计算机要求气象工作人员按英寸输入降雨量。但现在气象人员习惯于用英寸的百分之一来表示降雨量,因此,当您问他们今天的降雨量时,他们会说:“50”,这意味着那天的降雨量是50%英寸或者是半英寸。

可是,为了将这个数据输入到计算机中,您必须输入0.50。一个小伙子忘记了这一点,将50作为那天的降雨量输入到计算机中。现在,50英寸是一个很大、很可怕的降雨量。然后,计算机发现了这个错误,立即发出一个相应的警告信息:

赶快修建船只!将人们和动物都集中起来……

2.8 程序11:画蛇添足
下面的程序是完成Hello World程序任务的另一种方法,且经常有人使用这种方法。结果如何?

File: sub.cpp

1 // The string to print

2 char str[] = "Hello World!\n";

File: main.cpp

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

2 * print string -- Print a simple string. ?? *

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

4 #include <iostream>

5

6 extern char *str; // The string to print

7

8 int main()

9 {

10 std::cout << str << std::endl;

11 return (0);

12 }

(请参见“提示269”和“答案7”)

花絮

一个程序员曾想指出如何才能永远杜绝违规停车罚单。他有3种选择,那就是私人汽车牌照要么是0O0O0O,要么是O0O0O0或I1I1I1。他指出,如果一个警察发现了这辆汽车,因为字符O和数字0(或是I和1)看上去差不多,警察不可能正确地记录下车牌号。

不幸的是,他的计划没有得以实施。负责发放牌照的DMV工作人员认为这容易引起混淆,结果他的车牌照成了OOOOOO。

2.9 程序12:加快和等待
下面这个程序取自由一个经验丰富的系统程序员编写的代码。我也曾在该程序员所在的公司工作过一段时间。

这个程序设计用于通过连续的线路发送数据。尽管连续的线路能够每秒发送960个字符,但是我们每秒只能接收到300个字符。其原因是什么呢?

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

2 * send_file -- Send a file to a remote link ?*

3 * (Stripped down for this example.) ? *

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

5 #include <iostream>

6 #include <fstream>

7 #include <stdlib.h>

8

9 // Size of a block

10 const int BLOCK_SIZE = 256;

11

12 /**********************************************

13 * send_block -- Send a block to the output port *

14 **********************************************/

15 void send_block(

16 std::istream &in_file, // The file to read

17 std::ostream &serial_out // The file to write

18 )

19 {

20 int i; // Character counter

21

22 for (i = 0; i < BLOCK_SIZE; ++i) {

23 int ch; // Character to copy

24

25 ch = in_file.get();

26 serial_out.put(ch);

27 serial_out.flush();

28 }

29 }

30

31 int main()

32 {

33 // The input file

34 std::ifstream in_file("file.in");

35

36 // The output device (faked)

37 std::ofstream out_file("/dev/null");

38

39 if (in_file.bad())

40 {

41 std::cerr <<

42 "Error: Unable to open input file\n";

43 exit (8);

44 }

45

46 if (out_file.bad())

47 {

48 std::cerr <<

49 "Error: Unable to open output file\n";

50 exit (8);

51 }

52

53 while (! in_file.eof())

54 {

55 // The original program output

56 // a block header here

57 send_block(in_file, out_file);

58 // The original program output a block

59 // trailer here. It also checked for

60 // a response and resent the block

61 // on error

62 }

63 return (0);

64 }

(请参见“提示183”和“答案65”)

花絮

某个系统管理员养成了一个坏习惯,那就是在真正安装一个升级系统之前至少两个星期就宣称升级系统已经安装。通常,他会有许多抱怨,诸如“我的软件就要崩溃了,这都是因为您们的升级系统”。在宣称已经安装升级系统的日子里,这个系统管理员知道,这些故障不可能由升级而引起,因为他并没有真正安装升级系统。当他确实进行升级(当然是秘密进行安装)之后,随之而来的抱怨才是合理的。

一些业余无线电操作员也使用前面的伎俩。他们将安装一个新的无线电天线塔,并断开天线塔与用户之间的连接几个星期。这就使用户误认为:连续两个星期无法收看电视的原因是由新的天线引起的。


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

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

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

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

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