帮助我了解程序的工作原理。
我从Steven Pratt的书《程序语言C》中得到我在第页找到№289练习№6.
这是一个程序,她的代码在这里:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 0;
while (i<3) {
switch (i++) {
case 0 : printf ("fat ");
case 1 : printf ("hat ");
case 2 : printf ("cat ");
default : printf ("Oh no ");
}
putchar('n');
}
return 0;
}
如果我一点都不对,请纠正我。现在,我想解释一下它是如何工作的。首先将函数"while"工作三次。
变量"i"的第一个时间值为0。然后在功能";而";工作时,变量必须添加三次三次。
作为程序工作的结果,我得到了这样的结果:
fat hat cat oh no
hat cat oh no
cat oh no
但我不明白我怎么会得到这样的结果。我已经习惯了IDE CodeBlock,我的编译器运行得很好。我多次更改程序代码以了解它的工作原理。我换了接线员";案例";。
现在我改变了程序kode所以:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 0;
while (i<2) {
switch (i++) {
case 1 : printf ("fat ");
case 2 : printf ("hat ");
case 3 : printf ("cat ");
default : printf ("Oh no ");
}
putchar('n');
}
return 0;
}
在我得到这样一个结果之后:
oh no
fat hat cat oh no
但我不明白为什么这个程序如此有效?在我看来,程序必须给出这样的结果:
fat
Oh no
我认为结果或程序工作,一定只有这样。为什么程序工作如此?
"为什么这个程序如此有效">
简而言之,这是因为增量后变量的工作方式,以及本书对switch
语句的实现,尽管合法,但并不典型,未能将执行流限制在每次迭代一个案例。
首先,书中switch
语句的形式并不典型。我希望本书该部分的一些文本最终应该包括放置在case
行之间的break
语句的使用
在本书的原始示例中,当在第一个循环i == 0
上调用switch
时,产生以下执行流:
starts at `case 0:` then increments `i` to `1`, then outputs `fat`,
falls through to `case 1:` outputs `hat`,
falls through to `case 2:` outputs `cat`,
falls through to `default` outputs `Oh no`
while
循环的第二次迭代,i == 1
,再次后递增,从第二次case
开始
starts at `case 1:` `i` is incremented to `2`, then outputs `hat`,
falls through to `case 2:` outputs `cat`,
falls through to `default` outputs `Oh no`
对于i == 2
,第三次迭代如下:
starts at `case 2:` i is incremented to `3` outputs `cat`,
falls through to `default` outputs `Oh no`
在修改后的代码中,0
case
已删除。因为i
被初始化为0
,所以执行流程立即跳到default
的情况。你可以跟随其他人。
请注意,在您的书中,您可能会了解到switch
语句通常与break
语句一起使用,确保每个swtich
选择只执行一个case
:
int main(void)
{
int i = 0;
while (i<3) {
switch (i++) {
case 0 : printf ("fat ");
break;// execution flow jumps directly to closing }
case 1 : printf ("hat ");
break;// execution flow jumps directly to closing }
case 2 : printf ("cat ");
break;// execution flow jumps directly to closing }
default : printf ("Oh no ");
}
putchar('n');
}
getchar();
return 0;
}
您的代码应该如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i = 0;
while (i<2) {
switch (i++) {
case 1 : printf ("fat ");
break; // notice the "break" instruction after each "case" instruction block inside the switch.
case 2 : printf ("hat ");
break; // each "break" lets the program know where the instructions end for each "case" block.
case 3 : printf ("cat ");
break;
default : printf ("Oh no ");
break;
}
putchar('n');
}
return 0;
}