56 - Operador condicional ?:


Este operador hace más compacta ciertas algoritmos en las que interviene una estructura condicional if.

Para ver su sintaxis resolveremos un problema ya visto.

Problema 1:

Cargar dos valores por teclado. Guardar en otra variable el mayor valor ingresado y mostrarlo.

Programa: programa188.c

Ver video

#include<stdio.h>
#include<conio.h>

int main()
{
    int v1,v2;
    int may;
    printf("Ingrese primer valor:");
    scanf("%i",&v1);
    printf("Ingrese segundo valor:");
    scanf("%i",&v2);
    may=(v1>v2)?v1:v2;
    printf("El valor mayor es:%i",may);
    getch();
    return 0;
}

Tenemos la expresión:

    may=(v1>v2)?v1:v2;

El operador condición empieza después del operador de =

(v1>v2)?v1:v2;

La condición que se encuentra entre paréntesis:

(v1>v2)

puede generar un verdadero o un falso, en caso de ser verdadero lo indicado después del caracter ? se guarda en may. Si la condición genera un falso luego el contenido de v2 se guarda en may.

Esto mismo utilizando un if quedaría de la siguiente forma:

    if (v1>v2)
    {
        may=v1;
    }
    else
    {
        may=v2;
    }

Hay que tener en cuenta que el operador condicional ?: puede remplazar el uso de if en algunas situaciones y no en todas.

La sintaxis del operador condicional entonces es:

condición ? valor si cierto : valor si falso

Luego para usar el resultado que genera el operador condicional disponemos una sintaxis similar a esta:

variable = condición ? valor si cierto : valor si falso

Para ver que se utiliza esta sintaxis del operador condicional ?: mostramos una de las tantas función del código fuente del sistema operativo Linux:

función de Linux

Problema propuesto

Solución

programa189.c

#include<stdio.h>
#include<conio.h>

int main()
{
    int v1;
    int v2;
    int resultado;
    printf("Ingrese primer valor:");
    scanf("%i",&v1);
    printf("Ingrese segundo valor:");
    scanf("%i",&v2);
    resultado=(v1==v2)?v1+v2:v1*v2;
    printf("El resultado es:%i",resultado);
    getch();
    return 0;
}


Retornar