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=0
到 i=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()
将在末尾附加一个换行符。
#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=0
到 i=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()
将在末尾附加一个换行符。