C language: if() with no else(): using braces fails

旧时模样 提交于 2019-12-02 12:59:08

A single statement follows the if. If you need multiple statements, they must be combined into a single compound statement.

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

executes both pause functions and low regardless of what input returns. Where you put the newlines does not affect how C parses the code. You need braces to combine the 4 function calls into a single compound statement:

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

The absence or presence of an else clause does not change anything, except that

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

would result in an error, since the else is not joined to any if statement; the if concludes with the single statement high(14), and the pause(50) is a separate statement altogether, so the else is out of place.

Both the if and else clauses control only the immediately following statement. Your code, indented correctly, is actually:

#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

The fact that two statements may be on the same line is irrelevant; the if still only controls a single statement. If you want to control two or more statements, you must wrap them in a "compound statement" by using braces:

#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

Since the else must immediately follow the if's controlled statement, inserting it after your two-statement line without braces won't work.

The way if works is if (condition) stmt1;; if you want more than 1 statement to be executed if the condition is true, you need to wrap them up with {}. I suspect when you say your code "works" with no braces, you mean it compiles, but the execution will be quite different than if you wrapped the 4 statements in {}. Recall that C doesn't give a fig about indentation.

The identation (number of spaces or newlines) has absolutelly no meaning to the compiler. Without braces, only the very next instruction is covered by the if.

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

Actually means:

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

Tipp: Always start a newline after ";", Improves readability. Some people also suggest to always use the braces, that further reduces errors such as this one.

If input(3)==1 then high(14); will be called.

But pause(50);low(14);pause(50); will always be executed despite the return from input(3)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!