else if
中的每个表达式都必须测试相同的变量吗?请举例说明第二个问题。
并且任何表达式都可以用于IF表达式吗?
在SWITCH语句中,每个案例只能有一个或多个语句?如果我们可以放置多于1个语句,那么它的语法是什么?
case 1:
printf("Blah Blah");
printf("Blah blah blah");
或者
case 1:
{
printf("Blah Blah");
printf("Blah blah blah");
}
是的,这些都是愚蠢的问题,但我仍在学习编程。 提前谢谢。
答案 0 :(得分:3)
if
可以有一个或一个关联的else
子句。例子:
if (X)
printf("if\n");
或
if (X)
printf("if\n");
else
printf("else\n");
这些仅采用单一陈述。如果你想使用多个语句(有些人说即使每个if
/ else
只有一个语句,最好这样做),你必须使用花括号,如下所示:
if (X) {
printf("if\n");
} else {
printf("else\n");
}
您还可以嵌套if
s:
if (X)
printf("X\n");
else
if (Y)
printf("Y\n");
else
printf("something else\n");
这通常以更易读的方式编写:
if (X)
printf("X\n");
else if (Y)
printf("Y\n");
else
printf("something else\n");
你知道,else if
并不特别,它只是另一种形式嵌套if
的形式。
同样,如果你想要多个语句,你需要使用花括号:
if (X) {
printf("X\n");
printf("X2\n");
} else if (Y) {
printf("Y\n");
printf("Y2\n");
} else {
printf("something else\n");
printf("yet another print\n");
}
至于switch
语句,你不需要花括号。但请注意,“案例会失败”,这意味着在此示例中,实际执行了所有四个printf
:
switch (1) {
case 1:
printf("I will be printed!\n");
printf("Me too!\n");
case 2:
printf("And me also! (although I probably shouldn't)\n");
case 3:
printf("Me as well!\n");
}
如果你不想要这个(通常是这种情况),你必须在每个break
的代码之后使用明确的case
:
switch (1) {
case 1:
printf("I will be printed!\n");
printf("Me too!\n");
break;
case 2:
printf("I won't :(\n");
break;
case 3:
printf("D'oh!\n");
break;
}
顺便说一句,花括号规则可以概括:在允许单个语句的每个地方,你也可以使用类似{ ... }
的东西,称为块。使用块的优点是你可以
if
)case 3: { int x = 3; printf("%d\n", x); }
。答案 1 :(得分:0)
对于转换案例疑问,像case 1:
这样的案例就像普通的c标签一样。你不必做任何事来写一个“块”的陈述。它只是继续执行,直到swtich
块结束或遇到break
语句。即使是其他情况也会被忽略。
所以你可以写这样的开关案例:
case 1:
printf("Blah Blah");
printf("Blah Blah Blah");
break; //This is important. Signifies end of block, not the braces!
没有单独用于单个语句的语法。这一切都遵循一种模式,一旦你坚持下去,你将不再有这样的疑虑。我没有得到你的if...else
怀疑,但我认为它是相似的。可以把它想象成编译器如何解析它并从中获取意义,你会发现事情会自动变清。
答案 2 :(得分:0)
if
不能有多个else
。但是,您可以在if
案例中添加新的else
:
if (var == 0)
{
doZero();
}
else
{
if (var > 10)
{
doTooBig();
}
else
{
doDefault();
}
}
人们通常在第一个之后删除括号,因此它的内容如下:
if (var == 0)
{
doZero();
}
else if (var > 10)
{
doTooBig();
}
else
{
doDefault();
}
答案 3 :(得分:0)
switch (i){
case 1:
state1;
state2;
state3;
break;
}
当您点击匹配的大小写时,切换语句开始执行代码,然后直到它看到break语句。这意味着如果您忘记了中断,代码将继续运行所有情况,直到switch语句结束。
答案 4 :(得分:0)
不,每else
只能有一个if
。由于else if
是新的if
,因此可以使用新的else
- 您可以拥有任意数量的else if
。
不,您可以在任何if
声明中添加任何条件:
if (foo)
...
else if (bar)
...
是的,任何表达式都可以在if
语句中使用。
您可以根据需要使用任意数量的语句。你的两个例子都没问题,但第二个例子创建了一个新的块 - 你可以在其中声明变量,例如。
答案 5 :(得分:0)
其实如果不存在!
写这个:
if(...) {
}
else if(...) { // can test any condition, no need to use the same var.
}
else if(...) {
}
else if(...) {
}
else {
}
等同于(并由编译器理解):
if(...) {
}
else {
if(...) { // can test any condition, no need to use the same var.
}
else {
if(...) {
}
else {
if(...) {
}
else {
}
}
}
}
我们之所以像第一个片段那样写它是显而易见的:它更加清晰和可读 关于你关于switch语句的问题,写或不写括号没有任何区别。