Тернарни условни оператор (? :)

Поред if-else и switch-case у програмском језику C гранање можемо реализовати и помоћу тернарног условног оператора ?: који има следећу синтаксу:

израз1 ? израз2 : израз3;

Овај оператор назива се тернарним јер захтева три операнда (израз1, израз2 и израз3). Вредност израчунавања оператора добија се тако што се прво израчуна вредност израза1, па ако је његова вредност тачна (различита од нуле) као резултат добија се израз2, односно, ако је његова вредност нетачна (једнака нули) као резултат добија се израз3.


На пример, преправите следећи програм да уместо if-else користи тернарни условни оператор ?:

#include <stdio.h>
main()
{	
	int x, y;
	printf("Unesi x: ");
	scanf("%d", &x);
	if (x > 0)
		y = 1;
	else 
		y = 0;
	printf("y = %d", y);
}

Решење:

#include <stdio.h>
main()
{	
	int x, y;
	printf("Unesi x: ");
	scanf("%d", &x);
	y = x > 0 ? 1 : 0;
	printf("y = %d", y);
}

Испитује се израз x > 0. Уколико је израз тачан, као резултат променљива y добија вредност 1, односно, a уколико је нетачан y добија вредност 0.


израз2 и израз3 могу бити и наредбе. Преправите и овај програм да уместо if-else користи тернарни условни оператор:

#include <stdio.h>
main()
{
	int x;
	printf("Unesi broj: ");
	scanf("%d", &x);
	if (x % 2 == 0)
		printf("Paran");
	else
		printf("Neparan");
}

Решење:

#include <stdio.h>
main()
{
	int x;
	printf("Unesi broj: ");
	scanf("%d", &x);
	x % 2 == 0 ? printf("Paran") : printf("Neparan");
}

Ово можемо још краће записати на следећи начин:

#include <stdio.h>
main()
{ 
	int x; 
	printf("Unesi broj: "); 
	scanf("%d", &x); 
	printf(x % 2 == 0 ? "Paran" : "Neparan");
}

Испитује се израз x % 2 == 0. Уколико је израз тачан, као резултат извршава се printf(“Paran”), односно, уколико је нетачан, извршава се printf(“Neparan”).


Може се рећи да тернарни условни оператор представља скраћени запис if-else наредбе са ограничењем да израз2 и израз3 могу бити само једна наредба, односно један израз, а не и блок наредби, односно блок израза, као што је то могуће код if-else.


Тернарне условне операторе могуће је угњежђавати. На пример, следећи програм:

#include <stdio.h>
main()
{	
	int x, y;
	printf("Unesi x: ");
	scanf("%d", &x);
	if (x < 0)
		printf("Manje od 0");
	else
		if (x == 0)
			printf("Jednako 0");
		else
			printf("Vece od 0");
}

записали би помоћу тернарних условних оператора на следећи начин:

#include <stdio.h>
main()
{ 
	int x, y; 
	printf("Unesi x: "); 
	scanf("%d", &x); 
	printf(x < 0 ? "Manje od 0" : printf(x == 0 ? "Jednako 0" : "Vece od 0"));
}

Испитује се да ли је x < 0, па ако јесте исписаће се Manje od 0, а у супротном следи угњежђени услов где се испитује да ли је x == 0, па ако јесте исписаће се Jednako 0, а у супротном исписаће се Vece od 0.