锯)去削苹果吧。如果你真能做到,关二爷也会佩服你的。^_^。
if、else一般表示两个分支或是嵌套表示少量的分支,但如果分支很多的话……还是用
switch、case组合吧。其基本格式为:
switch(variable)
{
caseValue1:
//program
code
break;
caseValue2:
//program
code
break;
caseValue3:
//program
code
break;
…
default:
break;
}
很简单,但有两个规则:
【规则
1…19】每个
case语句的结尾绝对不要忘了加
break,否则将导致多个分支重叠(除非
有意使多个分支重叠)。
【规则
1…20】最后必须使用
default分支。即使程序真的不需要
default处理,也应该保留
语句:
default:
break;
这样做并非画蛇添足,可以避免让人误以为你忘了
default处理。
1。7。2,case关键字后面的值有什么要求吗?
好,再问问:真的就这么简单吗?看看下面的问题:
Value1的值为
0。1行吗?…0。1呢?…1呢?0。1+0。9呢?
1+2呢?3/2呢?‘
A’呢?“A”
呢?变量
i(假设
i已经被初始化)呢?NULL呢?等等。这些情形希望你亲自上机调试一
下,看看到底哪些行,哪些不行。
记住:case后面只能是整型或字符型的常量或常量表达式(想想字符型数据在内存里
是怎么存的)。
1。7。3,case语句的排列顺序
似乎从来没有人考虑过这个问题,也有很多人认为
case语句的顺序无所谓。但事实却
不是如此。如果
case语句很少,你也许可以忽略这点,但是如果
case语句非常多,那就不
得不好好考虑这个问题了。比如你写的是某个驱动程序,也许会经常遇到几十个
case语句
的情况。一般来说,我们可以遵循下面的规则:
【规则
1…21】按字母或数字顺序排列各条
case语句。
如果所有的
case语句没有明显的重要性差别,那就按
A…B…C或
1…2…3等顺序排列
case
语句。这样做的话,你可以很容易的找到某条
case语句。比如:
switch(variable)
{
case
A:
//program
code
break;
case
B:
//program
code
break;
case
C:
//program
code
break;
…
default:
break;
}
【规则
1…22】把正常情况放在前面,而把异常情况放在后面。
如果有多个正常情况和异常情况,把正常情况放在前面,并做好注释;把异常情况放在
后面,同样要做注释。比如:
switch(variable)
{
///////////////////////////////////////////////////////////////////////////////////
//正常情况开始
case
A:
//program
code
break;
case
B:
//program
code
break;
//正常情况结束
//////////////////////////////////////////////////////////////////////////////////////
//异常情况开始
case
…1:
//program
code
break;
//异常情况结束
//////////////////////////////////////////////////////////////////////////////////////
…
default:
break;
}
【规则
1…23】按执行频率排列
case语句
把最常执行的情况放在前面,而把最不常执行的情况放在后面。最常执行的代码可能
也是调试的时候要单步执行的最多的代码。如果放在后面的话,找起来可能会比较困难,而
放在前面的话,可以很快的找到。
1。7。4,使用
case语句的其他注意事项
【规则
1…24】简化每种情况对应的操作。
使得与每种情况相关的代码尽可能的精炼。case语句后面的代码越精炼,
case语句的结
果就会越清晰。你想想,如果
case语句后面的代码整个屏幕都放不下,这样的代码谁也难
看得很清晰吧。如果某个
case语句确实需要这么多的代码来执行某个操作,那可以把这些
操作写成一个或几个子程序,然后在
case语句后面调用这些子程序就
ok了。一般来说
case
语句后面的代码尽量不要超过
20行。
【规则
1…25】不要为了使用
case语句而刻意制造一个变量。
case语句应该用于处理简单的,容易分类的数据。如果你的数据并不简单,那可能使用
ifelseif
的组合更好一些。为了使用
case而刻意构造出来的变量很容易把人搞糊涂,应该避免
这种变量。比如:
charaction
=
a'0';
switch
(action)
{
case‘c’:
fun1();
break;
case‘d’:
…
break;
default:
break;
}
这里控制
case语句的变量是
action。而
action的值是取字符数组
a的一个字符。但是这
种方式可能带来一些隐含的错误。一般而言,当你为了使用
case语句而刻意去造出一个变
量时,真正的数据可能不会按照你所希望的方式映射到
case语句里。在这个例子中,如果
用户输入字符数组
a里面存的是“
const”这个字符串,那么
case语句会匹配到第一个
case
上,并调用
fun1()函数。然而如果这个数组里存的是别的以字符
c开头的任何字符串(比
如:“col”,“can”),case分支同样会匹配到第一个
case上。但是这也许并不是你想要的结
果,这个隐含的错误往往使人抓狂。如果这样的话还不如使用
if…elseif组合。比如:
if(0
strcmp(“const”,a))
{
fun1();
}
elseif
{
…
}
【规则
1…26】把
default子句只用于检查真正的默认情况。
有时候,你只剩下了最后一种情况需要处理,于是就决定把这种情况用
default子句来
处理。这样也许会让你偷懒少敲几个字符,但是这却很不明智。这样将失去
case语句的标
号所提供的自说明功能,而且也丧失了使用
default子句处理错误情况的能力。所以,奉劝
你不要偷懒,老老实实的把每一种情况都用
case语句来完成,而把真正的默认情况的处理
交给
default子句。
1。8,do、while、for关键字
C语言中循环语句有三种:while循环、do…while循环、for循环。
while循环:先判断
while后面括号里的值,如果为真则执行其后面的代码;否则不执
行。while(1)表示死循环。死循环有没有用呢?看下面例子:
比如你开发一个系统要日夜不停的运行,但是只有操作员输入某个特定的字符‘#’才
可以停下来。
while(1)
{
if(‘#’
GetInputChar())
{
break;
}
}
1。8。1,break与
continue的区别
break关键字很重要,表示终止本层循环。现在这个例子只有一层循环,当代码执行到
break时,循环便终止。
如果把
break换成
continue会是什么样子呢?continue表示终止本次(本轮)循环。当
代码执行到
continue时,本轮循环终止,进入下一轮循环。
while(1)也有写成
while(true)或者
while(11)或者
while((bool)
1)等形式的,效果一
样。
do…while循环:先执行
do后面的代码,然后再判断
while后面括号里的值,如果为真,
循环开始;否则,循环不开始。其用法与
while循环没有区别,但相对较少用。
for循环:for循环可以很容易的控制循环次数,多用于事先知道循环次数的情况下。
留一个问题:在
switch
case语句中能否使用
continue关键字?为什么?
1。8。2,循环语句的注意点
【建议
1…27】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放
在最外层,以减少
CPU跨切循环层的次数。
例如:
长循环在最内层,效率高长循环在最外层,效率低
for
(col=0;
col