C语言:if()没有else():使用大括号失败

时间:2014-01-29 20:09:20

标签: c if-statement braces

我对IF()表达式之后需要大括号感到困惑。 当使用IF(){...} ELSE {...}时,我习惯在IF和ELSE块周围使用大括号。 但是当我没有使用ELSE块时,它没有支撑,并且没有括号:
作品:IF()...
失败:IF(){...}
以下示例,这是针对微控制器的

#include "simpletools.h"
int main()
{
  while(1)
  {
    print("button = %d\n", input(3));
    if(input(3) == 1)                      //works if no braces
      high(14);
      pause(50);
      low(14);
      pause(50);
  } //while
}   // main

5 个答案:

答案 0 :(得分:4)

if之后的单个陈述。如果您需要多个语句,则必须将它们合并为一个复合语句。

if (input(3) == 1)
    high(14);
pause(50);
low(14);
pause(50);
无论pause返回什么,

都会执行low个函数和input。放置换行符的位置不会影响C解析代码的方式。您需要大括号将4个函数调用组合成一个复合语句:

if (input(3) == 1) {
    high(14);
    pause(50);
    low(14);
    pause(50);
}

缺少或存在else子句不会改变任何内容,除了

if (input(3) == 1)
    high(14);
pause(50);
else ...

会导致错误,因为else未加入任何if语句; if以单个语句high(14)结束,而pause(50)完全是一个单独的声明,因此else不合适。

答案 1 :(得分:2)

if和else子句都只控制紧随其后的语句。正确缩进的代码实际上是:

#include "simpletools.h"
int main()
{
  while(1)
  {
    print("button = %d\n", input(3));
    if(input(3) == 1) 
      high(14); 
    pause(50);
    low(14);
    pause(50);
  } //while
}   // main

两个陈述可能在同一条线上这一事实无关紧要; if仍然只控制一个语句。如果要控制两个或多个语句,则必须使用大括号将它们包装在“复合语句”中:

#include "simpletools.h"
int main()
{
  while(1)
  {
    print("button = %d\n", input(3));
    if(input(3) == 1) {
      high(14); 
      pause(50);
    } else {
      low(14);
      pause(50);
    }
  } //while
}   // main

由于else必须紧跟if的受控语句,因此在没有括号的双语句行之后插入它将不起作用。

答案 2 :(得分:0)

作品的方式是if (condition) stmt1;;如果条件为真,如果要执行多于1个语句,则需要用{}包装它们。我怀疑当你说你的代码没有大括号“工作”时,你的意思是它编译,但执行将与你在{}中包装4个语句时的执行情况完全不同。回想一下,C没有给出关于缩进的图。

答案 3 :(得分:0)

标识(空格或换行符的数量)绝对没有编译器的意义。没有大括号,只有下一条指令被if。

覆盖
if (a)
    DoSomething(); DoSomethingelse();
    MoreToDo();

实际上意味着:

if (a)
{
    DoSomething();
}
DoSomethingelse();
MoreToDo();

Tipp:始终在“;”之后开始换行,提高可读性。有些人还建议总是使用大括号,这样可以进一步减少这种错误。

答案 4 :(得分:-1)

如果input(3)==1,则会调用high(14);

但是pause(50);low(14);pause(50);将永远执行,尽管从input(3)

返回