首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 教育频道
学院论坛 | 推荐专题 | 专家答疑 | 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.10 程序13:问题程序
下面这个程序为什么不能正确结账?另外,除了本章要展示的的问题之外,这个程序还有一个错误。这个错误在哪里?

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

2 * Billing -- Print out how much we owe ?*

3 * customers or they owe us. ?? *

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

5 #include <iostream>

6

7 // Number of pennies in a dollar

8 const int DOLLAR = 100;

9

10 /***********************************************

11 * billing -- do the billing. ? *

12 * If the customer owes us money ? ? *

13 * -- output debt. ? *

14 * If we owe more than $100 ? *

15 * -- output credit. ? *

16 * Between $0 and $100 just ignore the ?? *

17 * account. ?? *

18 ***********************************************/

19 int billing(

20 // Current balance (in cents)

21 const int balance

22 ) {

23 if (balance < 0)

24 if (balance < - (100*DOLLAR))

25 std::cout << "Credit " << -balance << endl;

26 else

27 std::cout << "Debt " << balance << endl;

28

29 return (0);

30 }

31

32 int main()

33 {

34 /* Test code */

35 billing(50);

36 billing(-10);

37 return (0);

38 }

(请参见“提示44”和“答案31”)

2.11 程序14:移位程序
程序员都知道,向左移位就等于乘以2的一次幂。即:

x << 1与x * 2 (2 = 2 )相同

x << 2与x * 4 (4 = 2 )相同

x << 3与x * 8 (8 = 2 )相同

有个程序员使用该诀窍快速执行一个简单的计算,但是却出现了问题。

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

2 * Simple syntax testing. ?*

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

4 #include <iostream>

5

6 int main(void)

7 {

8 int x,y; // Two numbers

9

10 x = 1;

11

12 y = x<<2 + 1; // x<<2 = 4 so y = 4+1 = 5

13 std::cout << "Y=" << y << std::endl;

14 return (0);

15 }

(请参见“提示226”和“答案49”)

花絮

一个黑客接受了一个任务:编写一个程序,以模拟具有四种功能的计算器。任务要求程序能够执行加减乘除运算,但并没有指定使用何种数字,结果该黑客的程序使用罗马数字(IV + III = VII)。此外还需要提供程序的用户手册,但是任务中并没有规定要使用何种语言,结果这个黑客提供了一个利用拉丁文编写的详细的用户手册。

2.12 程序15:没有任何单词是关键字
下面的程序设计用于查看单词是否是关键字。它为什么不能正常运行呢?

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

2 * test the keyword finding function: "keyword" ?? *

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

4 #include <cstring>

5 #include <iostream>

6

7 /************************************************

8 * keyword -- return true if a keyword found ????????? ??? *

9 ************************************************/

10 bool keyword(

11 const char word[] // The work to look for

12 )

13 {

14 // A set of keywords

15 static const char *key_list[] = {

16 "bool",

17 "int",

18 "const",

19 NULL

20 };

21 int i; // Index into the list

22

23 // Look for the keyword

24 for (i = 0; key_list[i] != 0; ++i) {

25 if (std::strcmp(word, key_list[i]))

26 return (true);

27 }

28 return (false);

29 }

30 int main()

31 {

32 std::cout << "keyword(bool) = " <<

33 keyword("bool") << '\n';

34

35 std::cout << "keyword(sam) = " <<

36 keyword("sam") << '\n';

37 return (0);

38 }

(请参见“提示294”和“答案76”)

2.13 程序16:事半功倍
为什么复制下面这个程序如此慢?在我的系统中复制该文件花费了1分34秒,而利用Linux 的cp命令执行相同的任务,所花费的时间却不到半秒钟。是什么使该程序的复制如此快呢?

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

2 * copy input file to output file. ?*

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

4 #include <iostream>

5 #include <unistd.h>

6 #include <fcntl.h>

7

8 int main() {

9 // The fd of the input file

10 int in_fd = open("file.in", O_RDONLY);

11

12 // The fd of the output file

13 int out_fd = open("file.out",

14 O_WRONLY|O_CREAT, 0666);

15

16 char ch; // Character to copy

17

18 if (in_fd < 0) {

19 std::cout <<

20 "Error could not open input file\n";

21 exit (8);

22 }

23

24 if (out_fd < 0) {

25 std::cout <<

26 "Error could not open output file\n";

27 exit (8);

28 }

29 while (1) {

30 if (read(in_fd, &ch, 1) != 1)

31 break;

32

33 write(out_fd, &ch, 1);

34 }

35 close(in_fd);

36 close(out_fd);

37 return (0);

38 }

(请参见“提示6”和“答案96”)


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

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

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

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

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