c-将两个程序相互比较



帮助我了解程序的工作原理。

我从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`   

在修改后的代码中,0case已删除。因为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;
}

相关内容

  • 没有找到相关文章

最新更新