C语言,解释这段代码

时间:2015-03-06 01:13:00

标签: c switch-statement

#include <stdio.h>

int main()
{
    int i;

     for (i = 1; i <= 4; i++) {

       switch (i % 3) {

         case 0:  printf("zero, ");
         case 1:  printf("one, ");
         case 2:  printf("two, ");
         default: printf("what? ");

       }

       puts(" ");

     }

    return 0;
}

switch(i%3)puts(" ")是什么意思?我不明白他们的工作方式和意义。

还解释了为什么输出是:

一,二,什么? 二,什么? 零,一,二,什么? 一,二,什么?

2 个答案:

答案 0 :(得分:1)

i % 3(读取 i modulo three )是i3

的剩余部分

假设i等于7,i % 3将返回1,因为7 = 3 * 2 + 1

通常puts会将字符串写入标准输出。此外,换行符附加到换行符。因此,puts(" ")正在向标准输出输出空格和换行符。此功能来自stdio

puts的签名如下:

int puts(const char *str)

答案 1 :(得分:1)

具体输出的原因。由于您没有break;用于切换条件,因此您可以从找到的第一个匹配项中查看所有切换案例

来自this教程,

  

当接通的变量等于大小写时,该情况后的语句将一直执行,直到达到break语句。

     

如果没有出现中断,则控制流将落入后续案例,直到达到中断为止。

switch (i % 3) {
     case 0:  printf("zero, "); // <= No break so once this get match all the below will get execute. (Till a break is reached)
     case 1:  printf("one, ");
     case 2:  printf("two, ");
     default: printf("what? ");
}

因此,在i=0i=4的情况下,会发生以下情况,

i=1得到i%3时,case 1将与one,two,what?匹配,输出将为i=2

i%3得到case 2时,two,what?将与i=3匹配,输出将为i%3

case 0得到zero,one,two,what?时,i=4将与i%3匹配,输出将为case 1

one,two,what?得到default时,break将与what?匹配,输出将为puts()

请注意puts()是在没有遇到任何案件时履行的情况。但是在你的情况下,因为你没有{{1}},所以这也是{{1}}的结果。

{{1}}的作用是,只需将字符串放入标准输出即可。在你的情况下,put(&#34;&#34;)会放一个空格。请注意{{1}}将在结尾添加换行符。