The if else statement in C

By: Grenfel Viewed: 153264 times  Printer Friendly Format    


The if-else statement is used to express decisions. Formally the syntax is
   if (expression)
       statement1
   else
       statement2
where the else part is optional. The expression is evaluated; if it is true (that is, if expression has a non-zero value), statement1 is executed. If it is false (expression is zero) and if there is an else part, statement2 is executed instead.

Since an if tests the numeric value of an expression, certain coding shortcuts are possible. The most obvious is writing

   if (expression)
instead of
   if (expression != 0)
Sometimes this is natural and clear; at other times it can be cryptic.

Because the else part of an if-else is optional,there is an ambiguity when an else if omitted from a nested if sequence. This is resolved by associating the else with the closest previous else-less if. For example, in

   if (n > 0)
       if (a > b)
           z = a;
       else
           z = b;
the else goes to the inner if, as we have shown by indentation. If that isn't what you want, braces must be used to force the proper association:
   if (n > 0) {
       if (a > b)
            z = a;
   }
   else
       z = b;
The ambiguity is especially pernicious in situations like this:
   if (n > 0)
       for (i = 0; i < n; i++)
           if (s[i] > 0) {
               printf("...");
               return i;
           }
   else        /* WRONG */
       printf("error -- n is negative\n");
The indentation shows unequivocally what you want, but the compiler doesn't get the message, and associates the else with the inner if. This kind of bug can be hard to find; it's a good idea to use braces when there are nested ifs.

By the way, notice that there is a semicolon after z = a in

   if (a > b)
       z = a;
   else
       z = b;
This is because grammatically, a statement follows the if, and an expression statement like ``z = a;'' is always terminated by a semicolon.

Most Viewed Articles (in C )

Latest Articles (in C)

Comment on this tutorial