Terárny operátor pracuje ako podmienené príkazy if else.
Jednoduchý terárny operátor takto:
Kód:
#include <stdio.h>
int main(void)
{
int a = 2589, b = -1258;
if (a > b)
printf("Hodnota %d je vycsia\n", a);
else
printf("Hodnota %d je vycsia\n", b);
a > b ? printf("Hodnota %d je vycsia\n", a) : printf("Hodnota %d je vycsia\n", b);
// prehladnejsie by bolo
int pom;
pom = a > b ? a : b;
printf("Hodnota %d je vycsia\n", pom);
// mozno trochu menej prehladne, ale jednoduche a funkcne
printf("Hodnota %d je vycsia\n", a > b ? a : b); // na vypocet pouzity terarny operator
return 0;
}
Keď sa na to pozrieš, vidíš, že
otáznik plní funkciu príkazu
if (aj keď je za výrazom) a
dvojbotka príkazu
else.
Ako sám vidíš, je veľa spôsobov zápisu toho istého a vlastne compilátor to preloží úplne rovnako v každom prípade. Teda záleží len na tebe, ako to napíšeš. Hlavné je to, aby si tomu rozumel aj po rokoch, teda je dobré zložitejší kód poriadne okomentovať.
Zložený terárny operátor takto:
Kód:
#include <stdio.h>
int main(void)
{
int a = -25, b = -1258, c = -12, pom;
if (a > b && a > c) // a je vacsie ako b a zaroven a je vacsie ako c
pom = a;
else if (b > a && b > c)
pom = b;
else
pom = c;
printf("Najvacsie cislo je %d\n", pom);
a > b && a > c ? pom = a : b > a && b > c ? pom = b : c;
printf("Najvacsie cislo je %d\n", pom);
// spravnejsi zapis
pom = a > b && a > c ? a : b > a && b > c ? b : c;
printf("Najvacsie cislo je %d\n", pom);
// pre prehladnost je vhodne pouzivat zatvorky
pom = (a > b && a > c) ? a : (b > a && b > c) ? b : c;
printf("Najvacsie cislo je %d\n", pom);
return 0;
}
Tvoj príklad by sa dal zapísať za pomoci terárneho operátora takto:
(AJ keď na takéto podmienky sa zvyčajne používa switch)
Kód:
#include <stdio.h>
int main(void)
{
float cislo;
int presnost;
printf("Zadaj cislo:");
scanf("%f",&cislo);
printf("Zadaj presnost z rozsahu (1 az 6) desatinnych miest:");
scanf("%d", &presnost);
/*if*/ (presnost == 1) ?
printf("Vysledok je %.1f\n",cislo) :
/*else if*/ (presnost == 2) ?
printf ("Vysledok je %.2f\n",cislo) :
/*else if*/ (presnost == 3) ?
printf("Vysledok je %.3f\n",cislo) :
/*else if*/ (presnost == 4) ?
printf("Vysledok je %.4f\n",cislo) :
/*else if*/ (presnost ==5) ?
printf("Vysledok je %.5f\n",cislo) :
/*else if*/ (presnost == 6) ?
printf("Vysledok je %f\n",cislo) : printf("Mino rozsah!\n");
return 0;
}
Lepšie takto:
Kód:
#include <stdio.h>
int main(void)
{
float cislo;
int presnost;
printf("Zadaj cislo:");
scanf("%f",&cislo);
printf("Zadaj presnost z rozsahu (1 az 6) desatinnych miest:");
scanf("%d", &presnost);
presnost == 1 ? printf("Vysledok je %.1f\n",cislo) :
presnost == 2 ? printf ("Vysledok je %.2f\n",cislo) :
presnost == 3 ? printf("Vysledok je %.3f\n",cislo) :
presnost == 4 ? printf("Vysledok je %.4f\n",cislo) :
presnost == 5 ? printf("Vysledok je %.5f\n",cislo) :
presnost == 6 ? printf("Vysledok je %f\n",cislo) : printf("Mino rozsah!\n");
return 0;
}
Na záver ukážka prepínača switch:
Kód:
#include <stdio.h>
int main(void)
{
float cislo;
int presnost;
printf("Zadaj cislo:");
scanf("%f",&cislo);
printf("Zadaj presnost z rozsahu (1 az 6) desatinnych miest:");
scanf("%d", &presnost);
switch (presnost) {
case 1:
printf("Vysledok je %.1f\n",cislo);
break;
case 2:
printf ("Vysledok je %.2f\n",cislo);
break;
case 3:
printf("Vysledok je %.3f\n",cislo);
break;
case 4:
printf("Vysledok je %.4f\n",cislo);
break;
case 5:
printf("Vysledok je %.5f\n",cislo);
break;
case 6:
printf("Vysledok je %f\n",cislo);
break;
default:
printf("Mino rozsah!\n");
}
return 0;
}
_________________
kódy píšem na platforme: linux Ubuntu 12.04 (Geany, Code::Blocks), WinXP (Code::Blocks, PsPad editor),
Skype: libcokamo, ICQ: 56312279
Ak treba, napíš mi na
libcosenior@gmail.com. To mám v mobile a stále po ruke.