IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Opérateur ternaire en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Par défaut Opérateur ternaire en C
    Bonjour juste une question probablement simple . J'ai le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    i = 1 + ( 2 > 1)? 1 : 2;
    printf("%d\n", i);
    Je m'attendais à obtenir i = 2, mais à ma grande surprise ça affiche i = 1. J'aimerais comprendre pourquoi.

    Merci

  2. #2
    Membre expérimenté
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Par défaut
    1) Tu devrais préciser le type de la variable i, même si c'est probablement un int.
    2) Obtenir "i = 0" est un peu vague, j'imagine que tu veux simplement dire que ton code affiche "0" ?
    3) Ne pas oubliez que l'opérateur ternaire est moins prioritaire que l'addition.
    4) Quand j'exécute le bout de code qui suit, je n'obtiens en aucun cas "0"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "stdio.h"
     
    int main() {
        int i = 1 + (2 > 1) ? 1 : 2;
        int j = (1 + (2 > 1)) ? 1 : 2;
        int k = 1 + ((2 > 1) ? 1 : 2);
        printf("%d\n", i); // Affiche "1".
        printf("%d\n", j); // Affiche "1".
        printf("%d\n", k); // Affiche "2".
        return 0;
    }

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ulrik18 Voir le message
    Bonjour juste une question probablement simple . J'ai le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    i = 1 + ( 2 > 1)? 1 : 2;
    printf("%d\n", i);
    Je m'attendais à obtenir i = 2, mais à ma grande surprise ça affiche i = 0. J'aimerais comprendre pourquoi.

    Merci
    Salut

    Ce que veut dire Chatanga c'est que dans 1 + ( 2 > 1)? 1 : 2, le ternaire fait une évaluation sur 1 + (2 > 1). Si cette évaluation est vraie alors le ternaire renvoie 1 sinon il renvoie 2.

    D'ailleurs ta gestion des parenthèses montre que tu n'as pas bien compris que le ternaire était un opérateur entier. Ce n'est pas (2>1) qu'il faut encapsuler (comme si c'était un if) mais le ternaire tout entier si tu veux qu'il soit évalué comme tu l'entends
    i=1 + (2 > 1 ?1 :2) donnera ce que tu attends...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Par défaut
    Je n'avais effectivement pas compris qu'il s'agissait d'un opérateur à part entière.
    Et pour le "i = 0", c'était une erreur de frappe (désolé), çà donnait bel et bien 1 et ça me paraissait tout autant bizarre. Mais maintenant c'est compris

    "? :" est un opérateur à part entière et est moins prioritaire que l'addition !

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 11/04/2006, 11h41
  2. opérateur ternaire
    Par the big ben 5 dans le forum Langage
    Réponses: 7
    Dernier message: 23/02/2006, 18h06
  3. Equivalant opérateur ternaire C++
    Par Pero dans le forum Langage
    Réponses: 5
    Dernier message: 07/10/2005, 09h44
  4. [java] pb Opérateur ternaire
    Par phileme dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/07/2004, 13h10
  5. Opérateur ternaire
    Par MASSAKA dans le forum Langage
    Réponses: 14
    Dernier message: 13/05/2004, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo