I'm having a little difficulty understanding the usage of the conditional operator (in blue). The user is supposed to enter 0 for a reverse sort and 1 for an alphabetical sort. If I understand the conditional op, if sort_type is true (i.e. non-zero) then the statement evaluates to reverse, otherwise it evaluates to alpha. But, the value to be entered for reverse is zero - so wouldn't that result in a false, and then set compare to alpha? I'm confused...Code:/* Inputs a list of strings from the keyboard, sorts them */ /* in ascending or descending order, then displays them */ #include <stdio.h> #include <string.h> #include <process.h> #include <malloc.h> #define MAXLINES 25 int get_lines(char *lines[]); void sort(char *p[], int n, int sort_type); void print_strings(char *p[], int n); int alpha(char *p1, char *p2); int reverse(char *p1, char *p2); char *lines[MAXLINES]; void main(void) { int number_of_lines, sort_type; /* Read in the lines from keyboard */ number_of_lines = get_lines(lines); if (number_of_lines < 0) { puts("Malloc error"); exit(-1); } puts("Enter 0 for reverse order sort, 1 for alphabetical:"); scanf("%d", &sort_type); sort(lines, number_of_lines, sort_type); print_strings(lines, number_of_lines); } int get_lines(char *lines[]) { int n = 0; char buffer[80]; /* temp storage for each line */ puts("Enter on line at a time; enter blank when done"); while (n < MAXLINES && gets(buffer) != 0 && buffer[0] != '\0') { if ((lines[n] = (char *)malloc(strlen(buffer) + 1)) == NULL) return -1; strcpy(lines[n++], buffer); /* copy buffer to lines at [n] and increment n */ } return n; /* return number of lines entered */ } void sort(char *p[], int n, int sort_type) { int a, b; char *x; /* Pointer to function */ int (*compare)(char *s1, char *s2); /* Initialize the pointer to point at the proper comparison */ /* function depending on the argument sort_type */ compare = (sort_type) ? reverse : alpha; for (a = 1; a < n; a++) { for (b = 0; b < n-1; b++) { if (compare(p[b], p[b+1]) > 0) { x = p[b]; p[b] = p[b+1]; p[b+1] = x; } } } } void print_strings(char *p[], int n) { int count; for (count = 0; count < n; count++) printf("\n%s ", p[count]); } int alpha(char *p1, char *p2) /* Alphabetical comparison */ { return(strcmp(p2, p1)); } int reverse(char *p1, char *p2) /* Reverse alphabetical comparison */ { return(strcmp(p1, p2)); }