第3章 字符的奇迹
本章中的程序基本上都能够正常工作,完成预定的目的,但总有一、两个字符会出现问题。如果有字符会出现问题,它们将导致令人惊奇的结果并使整个程序失败。
3.1 程序17:又一个Hello World程序
我们又编写了一个Hello World程序,并故意在其中安排了一个小错误。该错误在哪里呢?
1 #include <iostream>
2
3 int main()
4 {
5 std::cout << "Hello World!/n";
6 return (0);
7 }
(请参见“提示172”和“答案69”)
花絮
真正的程序员是不会使用COBOL来编写程序的。COBOL只适用于那些水平低下的编程人员。
真正程序员的程序在首次使用时,通常都无法正确地工作。但是,如果您在自己的计算机中安装它们,它们会在少于30小时的调试会话中逐步调整到正确的运行状态。
真正的程序员从不编写文档。文档都是为那些不能读懂程序清单或对象组的笨人准备的。
真正的程序员不会使用Pascal、BLISS、Ada或者其他任何一种偏激的计算机学科语言。强大的输入功能只是为那些记忆力较差的人准备的。
3.2 程序18:典型错误
如果您是一个程序员,肯定犯过下文程序中包含的错误。如果您正在学习编程,也将会犯这样的错误。而且,如果您不找出问题之所在,它会令您焦头烂额。
下面这个程序究竟会完成什么事情呢?
1 /************************************************
2 * Test the logic for a simple accounting ?*
3 * program. ?*
4 ************************************************/
5 #include <iostream>
6
7 int main()
8 {
9 // Amount owed (if any) by the user
10 int amount;
11
12 std::cout << "Enter current balance: ";
13 std::cin >> amount;
14
15 if (amount = 0)
16 std::cout << "You owe nothing\n";
17 else
18 std::cout << "You owe " << amount
<< "\n";
19
20 return (0);
21 }
(请参见“提示155”和“答案47”)
花絮
我曾为一家重要的软件厂商工作,开发我们的字处理软件的国际版本。该版本的启动页面包含版本发布日期,日期格式为mm/dd/yy,例如09/20/83。但是,欧洲使用dd/mm/yy格式作为其标准。在无法确定时,我问老板该使用哪种格式。老板记录下这个问题,并花费了大约一个月的时间与他的经理们讨论此事。直到我发布这个软件之后的一周,他才将决定告诉我。而这期间,我已经解决了这个问题,其方法是将软件的发布日期放在11月11号,显示的发布日期就是11/11/83。
3.3 程序19:检查质数
下面这个简单程序设计用于检查2至9之间的质数(也叫素数)。该程序所使用的算法很简单,且使用了暴力比较(brute force)方法,但看上去一切应当可以正常运行。可是,实际会发生什么情况呢?
1 /***********************************************
2 * prime -- A very dump program to check to see ?? ? *
3 * if the numbers 2-9 are prime. ?? *
4 ***********************************************/
5 #include <iostream>
6
7 int main()
8 {
9 int i; // Number we are checking
10
11 for (i = 2; i < 10; ++i) {
12 switch(i) {
13 case 2:
14 case 3:
15 case 5:
16 case 7:
17 std::cout << i << " is prime\n";
18 break;
19 defualt:
20 std::cout << i <<
21 " is not prime\n";
22 break;
23 }
24 }
25 return (0);
26 }
(请参见“提示354”和“答案67”)
花絮
华盛顿州的Social Welfare计算机常常用两位数来保存个人年龄。然而,一位女士的年龄对于这个系统来说实在是太大了。当她100岁时,这个计算机将她的年龄记录为00;101岁时,记录为01。这并没有引起任何问题,直到她的年龄达到107岁时,联邦政府派遣一名调查旷课或逃学的督学人员去她家,看看她为什么还没有去接受初级教育。
|