#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(" ")
是什么意思?我不明白他们的工作方式和意义。
还解释了为什么输出是:
一,二,什么? 二,什么? 零,一,二,什么? 一,二,什么?答案 0 :(得分:1)
i % 3
(读取 i modulo three )是i
除3
假设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=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()
是在没有遇到任何案件时履行的情况。但是在你的情况下,因为你没有{{1}},所以这也是{{1}}的结果。
{{1}}的作用是,只需将字符串放入标准输出即可。在你的情况下,put(&#34;&#34;)会放一个空格。请注意{{1}}将在结尾添加换行符。