C语言:if()不带else():使用大括号失败

C语言:if()不带else():使用大括号失败,c,if-statement,braces,C,If Statement,Braces,我对IF()表达式后面是否需要大括号感到困惑。 当使用IF(){…}ELSE{…}时,我习惯在IF和ELSE块周围使用大括号。 但是当我使用no-ELSE块时,它不使用大括号工作,而使用大括号失败: 工作:如果() 失败:如果(){…} 下面的示例是针对微控制器的 #include "simpletools.h" int main() { while(1) { print("button = %d\n", input(3)); if(input(3) == 1)

我对IF()表达式后面是否需要大括号感到困惑。 当使用IF(){…}ELSE{…}时,我习惯在IF和ELSE块周围使用大括号。 但是当我使用no-ELSE块时,它不使用大括号工作,而使用大括号失败:
工作:如果()
失败:如果(){…}
下面的示例是针对微控制器的

#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

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

如果
输入(3)==1,则
高(14)将被调用


pause(50);低(14);暂停(50)input(3)

返回,但始终会执行code>,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的受控语句之后,因此在两个语句行之后插入它(不带大括号)将不起作用。

if
后面紧跟一条语句。如果需要多条语句,则必须将它们组合成一条复合语句

if (input(3) == 1)
    high(14);
pause(50);
low(14);
pause(50);
执行
pause
函数和
low
函数,无论
输入返回什么。换行符的位置不影响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
不合适。

标识(空格或换行数)对编译器毫无意义。如果没有大括号,if只包含下一条指令

if (a)
    DoSomething(); DoSomethingelse();
    MoreToDo();
实际上是指:

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

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

你说的失败是什么意思?没有大括号,如果条件为true,则只执行下一条语句。显示“失败”代码。不会调用pause(50)。@Bart-复制粘贴中的我的错误