-1

我对 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
4

5 回答 5

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语句;theif以单个语句 结束high(14),而 thepause(50)完全是一个单独的语句,因此else不合适。

于 2014-01-29T20:15:36.800 回答
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 的受控语句之后,所以将它插入到没有大括号的两语句行之后是行不通的。

于 2014-01-29T20:15:35.440 回答
0

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

于 2014-01-29T20:13:33.467 回答
0

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

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

其实意思是:

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

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

于 2014-01-29T20:18:17.727 回答
-1

如果input(3)==1thenhigh(14);将被调用。

pause(50);low(14);pause(50);将始终被执行,尽管从input(3)

于 2014-01-29T20:13:56.683 回答