Being traditional and, to be honest, ancient, the C language deals primarily with two-way evaluations: a > b
, c != d
, r <= 0
, and so on. Complex comparisons build upon these atomic nuggets, but among the trendy languages a newer alternative exists: the three-way evaluation.
A two-way evaluation returns a Boolean, 1 or 0 or TRUE or FALSE. A three-way evaluation returns -1, 0, or 1 based on how items compare:
-1 for less than
0 for equal
+1 for greater than
The C language doesn’t have a three-way operator or other evaluation, but it does have the strcmp() function, upon which this three-way evaluation logic is based: The strcmp() function returns -1, 0, or 1 depending on how two strings compare. When all the characters match, zero is returned. Otherwise -1 or 1 are returned based on how the individual letters compare. A three-way evaluation follows the same logic.
The following code uses the tweval() function to perform a three-way evaluation on two integers.
#include <stdio.h> int tweval(int a, int b) { if( a<b ) return(-1); if( a>b ) return(1); return(0); } int main() { int x,y,r; /* get input */ printf("Enter value 1: "); scanf("%d",&x); printf("Enter value 2: "); scanf("%d",&y); /* three-way evaluation */ r = tweval(x,y); if( r<0 ) printf("%d is less than %d\n",x,y); else if( r>0 ) printf("%d is greater than %d\n",x,y); else printf("%d and %d are equal\n",x,y); return(0); }
The tweval() function compares a<b
and returns -1 if true. It then compares a>b
and returns 1 if true. Otherwise, the function returns zero as the two integers must be equal.
Here’s a sample run:
Enter value 1: 5
Enter value 2: 100
5 is less than 100
As is often the case, the C language is capable of emulating a feature offered in a language the cool kids favor, but what it doesn’t have is the common three-way operator, <=>
, often called the “spaceship” operator. (The name comes from a text-mode Star Trek game way back when, where the <=>
characters represented a spaceship.)
So while you can’t use the a <=> b
operator in C, you can concoct your own tweval() or similar function, copying from the strcmp() function — which has been in the C library for decades. And don’t forget to code three-way evaluation functions for other data types: float, double, and char.