一个IF可以有多个ELSE子句? (c编程)

时间:2012-02-09 18:25:12

标签: c

else if中的每个表达式都必须测试相同的变量吗?请举例说明第二个问题。 并且任何表达式都可以用于IF表达式吗? 在SWITCH语句中,每个案例只能有一个或多个语句?如果我们可以放置多于1个语句,那么它的语法是什么?

case 1:
      printf("Blah Blah");
      printf("Blah blah blah");

或者

case 1:
      {
      printf("Blah Blah");
      printf("Blah blah blah");
      }

是的,这些都是愚蠢的问题,但我仍在学习编程。 提前谢谢。

6 个答案:

答案 0 :(得分:3)

if,else,“else if”

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;
}

顺便说一句,花括号规则可以概括:在允许单个语句的每个地方,你也可以使用类似{ ... }的东西,称为。使用块的优点是你可以

  1. 使用多个陈述,否则只允许一个陈述(例如在if
  2. 在每个块的开头声明变量!因此,您可以执行以下case 3: { int x = 3; printf("%d\n", x); }
  3. 之类的操作

答案 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语句结束。

http://www.cprogramming.com/tutorial/lesson5.html

答案 4 :(得分:0)

  1. 不,每else只能有一个if。由于else if是新的if,因此可以使用新的else - 您可以拥有任意数量的else if

  2. 不,您可以在任何if声明中添加任何条件:

    if (foo)
      ...
    else if (bar)
      ...
    
  3. 是的,任何表达式都可以在if语句中使用。

  4. 您可以根据需要使用任意数量的语句。你的两个例子都没问题,但第二个例子创建了一个新的块 - 你可以在其中声明变量,例如。

答案 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语句的问题,写或不写括号没有任何区别。