Using Ternary Operator in C for If Else & Else If

  • Thread starter camel-man
  • Start date
  • Tags
    Operator
In summary, the conversation discusses the use of ternary operators in C and whether it is possible to construct an if else if statement with multiple conditions using ternary operators. It is mentioned that while the ternary operator can be used for this purpose, it is generally frowned upon and may be banned in some software firms. The conversation also delves into functional programming and its different approach to programming. It is suggested that one should be careful when using complex expressions with ternary operators, as it may make the code difficult to read and understand for others.
  • #1
camel-man
76
0
I was wondering if anyone knew if it is possible to construct an if else if with the ternary operator in C.

I know that we can use it for if else, but what if you wanted multiple conditions for else if in your statement?

Code:
printf("%d",(a>5)?1:(a<5)?0:10);
//Just a silly example
perhaps?
 
Technology news on Phys.org
  • #2
I think you can do the nested ternary ops but you can't insert arbitrary java code in there. It must be an expression.

You could use a user-defined boolean function for the condition and other functions for the result which in effect does the same thing but its probably harder to read in the long run for short if/else type work.

double y = <some-user-boolean-function>(a,b,c) ? <some-user-function-returns-a-double>(a,b,c) : <some-other-user-function-that-returns-a-double(a,b,c);
 
Last edited:
  • #3
Sure. It's just another operator. So,

Code:
// Example 1, various assignments to x via conditional statements.
if (cond1)
   x = val1;
else if (cond2)
   x = val2;
else if (cond3)
   x = val3;
else
   x = val4;

// Example 2, various assignments to y via conditional statements.
if (cond1)
   if (cond2)
      if (cond3)
         y = val3;
      else
         y = val2;
   else
      y = val1;
else
   y = val4;

Writing these using the ternary operators:
Code:
// Example 1, as a single assignment statement using multiple ternary operators
x = cond1 ? val1 : cond2 ? val2 : cond3 ? val3 : val4;

// Example 2, as a single assignment statement using multiple ternary operators
y = cond1 ? cond2 ? cond3 ? val3 : val2 : val1 : val4;

You may want to use parentheses. That ternary operator evaluates right to left combined with where it lives in the C-family precedence table can lead to some surprising interpretations by the compiler.
 
  • #4
Please consider that if you use such expressions in a software firm, it's likely that your colleagues will want to cut off your hands. ;)
 
  • #5
I like Serena said:
Please consider that if you use such expressions in a software firm, it's likely that your colleagues will want to cut off your hands. ;)

or better yet post t online for everyone to see:

http://thedailywtf.com/
 
  • #6
I like Serena said:
Please consider that if you use such expressions in a software firm, it's likely that your colleagues will want to cut off your hands. ;)
Sure. In most cases (the vast, vast majority of cases) it's better to use if statements or a case statement instead of a complex expression using ternary operators. In many software firms chaining the ternary operator is verboten. Some places simply make the ternary operator verboten, period. Some people just don't grok functional programming so they ban its appearance in any form.

There are a few cases where would I prefer the ternary operator, even chained. Clear, concise, functional. However, I can't use the ternary operator because I tend to work on projects that forbid its use. Rats! Double rats, as I am the author of the stupid coding standards on many of those projects. (I'm quite aware that quite a few people just can't grok functional programming.)
 
  • #7
D H said:
Sure. In most cases (the vast, vast majority of cases) it's better to use if statements or a case statement instead of a complex expression using ternary operators. In many software firms chaining the ternary operator is verboten. Some places simply make the ternary operator verboten, period. Some people just don't grok functional programming so they ban its appearance in any form.

There are a few cases where would I prefer the ternary operator, even chained. Clear, concise, functional. However, I can't use the ternary operator because I tend to work on projects that forbid its use. Rats! Double rats, as I am the author of the stupid coding standards on many of those projects. (I'm quite aware that quite a few people just can't grok functional programming.)

If you like functional programming check out Scala, a better Java than Java. Its a combination of functional and OO programming styles.

http://www.scala-lang.org/
 
  • #8
Functional programming... isn't that where you program fragments like
Code:
(setq grok (?: cond1 val1 cond2 val2 cond3 val3 val4))
just because you can?
 
Last edited:
  • #9
Just be aware that it is immoral to write code that is really tough for others to read. Agree with the "cut off your hands" comments above. :-)
 
  • #10
harborsparrow said:
Just be aware that it is immoral to write code that is really tough for others to read. Agree with the "cut off your hands" comments above. :-)

and then there's APL, a true write-only language of great power, simplicity and obfuscation that upon writing your program you can never ever hope to figure out what it does in finite time but at least you have the opportunity to rewrite it if you want.
 
  • #11
jedishrfu said:
and then there's APL, a true write-only language of great power, simplicity and obfuscation that upon writing your program you can never ever hope to figure out what it does in finite time but at least you have the opportunity to rewrite it if you want.

Ah yes, for those of us that think that
Code:
(setq grok (?: cond1 val1 cond2 val2 cond3 val3 val4))
is too obvious, we can simply write something like
Code:
⍋x
to mean the same thing.
 
  • #12
I like Serena said:
Functional programming... isn't that where you program fragments like
Code:
(setq grok (?: cond1 val1 cond2 val2 cond3 val3 val4))
just because you can?
Your syntax isn't quite right, and you're using an aspect of Lisp that isn't pure. Fixing both,
Code:
(dosomethingwith (cond ((cond1) val1) ((cond2) val2) ((cond3) val3) (t val4)))

Note the lack of the setq. That's verboten in pure Lisp. Something like C's i=i+1 doesn't make sense in purely functional languages.

Functional programming requires a rather different outlook on programming.
 
  • #13
D H said:
Your syntax isn't quite right, and you're using an aspect of Lisp that isn't pure. Fixing both,
Code:
(dosomethingwith (cond ((cond1) val1) ((cond2) val2) ((cond3) val3) (t val4)))

Note the lack of the setq. That's verboten in pure Lisp. Something like C's i=i+1 doesn't make sense in purely functional languages.

Functional programming requires a rather different outlook on programming.

The best example for functional programming is in doing a generalized sorting algorithm where the comparison is left for the end programmer to provide. The comparison is placed in a function and the function is passed to the sort function and magically the data is sorted.

Scala has all kinds of examples like this using closures. A closure is a kind of function that is passed to one of many collection iterators that Scala has in its arsenal of programming constructs.
 
  • #14
C++ also has functional programming features. There's std::sort, for example. C++11 takes C++ much further along the road toward being a functional language. Lambda expressions, bindings, currying, ...
 

What is the ternary operator in C?

The ternary operator in C is a conditional operator that allows for a shorter, more concise way of writing if-else statements. It takes three operands: a condition, a value if the condition is true, and a value if the condition is false. It is denoted by a question mark (?) and a colon (:).

How do you use the ternary operator in C?

To use the ternary operator in C, you first need to have a condition that evaluates to either true or false. Then, you can write the condition followed by a question mark (?), the value if the condition is true, a colon (:), and the value if the condition is false. For example: condition ? value_if_true : value_if_false;

Can the ternary operator be used for multiple conditions in C?

Yes, the ternary operator can be used for multiple conditions in C by nesting multiple ternary operators within each other. However, it is not recommended to use multiple ternary operators as it can make the code more difficult to read and understand.

What is the difference between if-else and ternary operator in C?

The main difference between if-else statements and the ternary operator in C is that if-else statements can handle multiple conditions and have more flexibility in what actions to take based on those conditions. The ternary operator is more limited as it only allows for two outcomes based on a single condition.

When should the ternary operator be used in C?

The ternary operator should be used in C when there is a simple if-else statement with only two outcomes. It can also be useful in situations where code readability is important, as it can make the code more concise and easier to understand. However, it is important to use it sparingly and not overuse it, as it can make the code more difficult to maintain in the long run.

Similar threads

  • Programming and Computer Science
Replies
4
Views
710
  • Programming and Computer Science
Replies
6
Views
1K
  • Programming and Computer Science
Replies
23
Views
2K
  • Programming and Computer Science
Replies
5
Views
2K
  • Programming and Computer Science
Replies
22
Views
1K
  • Programming and Computer Science
Replies
20
Views
2K
  • Programming and Computer Science
Replies
7
Views
1K
  • Programming and Computer Science
Replies
12
Views
1K
  • Programming and Computer Science
Replies
2
Views
896
  • Programming and Computer Science
Replies
1
Views
895
Back
Top