C语言,解释这段代码

C language, explain this code

#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(" ") 是什么意思?我不明白它们的工作原理和含义。

还要解释为什么输出是:

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

i % 3(读作 i 模三)是 i 除以 3

的余数

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

通常 puts 字符串 写入标准输出。此外,换行符附加到输出。因此,puts(" ") 向标准输出输出一个 space 和一个换行符。此函数来自 stdio

puts 的签名如下:

int puts(const char *str)

特定输出的原因。由于您没有 break; 用于切换条件,因此您从找到的第一个匹配项开始就遍历了所有切换案例

来自this教程,

When the variable being switched on is equal to a case, the statements following that case will execute until a break statement is reached.

If no break appears, the flow of control will fall through to subsequent cases until a break is reached.

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(" ") 将放置一个 space。并注意 puts() 将在末尾附加一个换行符。