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 :

Valeur de retour


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Par défaut Valeur de retour
    Bonsoir,

    Je sais que ma question peut paraître tarabiscotée mais quelque chose m'intrigue à propos du while interne du code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        do{
            printf("un nb svp\n");
            compte = scanf("%d", &x);
            while (y=(getchar()!='\n'),z=printf("y=%d et z=%d\n",y,z));
        }
        while(compte!=1);
    Normalement on sort d'un while quand l'expression est à zéro et je ne sors pas de mon while interne -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (y=(getchar()!='\n'),z=printf("y=%d et z=%d\n",y,z))
    - alors même que le est à 0 et le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("y=%d et z=%d\n",y,z)
    - que j'ai inséré pour voir ce que vaut le getchar() - et je teste même le printf avec le z - qui est aussi à zéro.
    Donc tout le while vaut zéro - à la première saisie ensuite z se met à valoir 11, puis 12 ! - et je devrais en sortir à la première saisie, mais non je reste dedans et je ne comprends pas du tout pourquoi ?

    Je vous remercie de bien vouloir m'éclairer là dessus si vous avez une idée, merci d'avance !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Citation Envoyé par gauguin Voir le message
    Donc tout le while vaut zéro - à la première saisie ensuite z se met à valoir 11, puis 12 ! - et je devrais en sortir à la première saisie, mais non je reste dedans et je ne comprends pas du tout pourquoi ?
    Bonsoir,

    L'opérateur « , » évalue la première expression, puis la seconde et prend la valeur de cette seconde expression, soit, ici, celle de ton « z=printf("y=%d et z=%d\n",y,z) » et comme printf renvoie le nombre de caractères imprimés, ta fonction n'est jamais nulle. À noter que la fonction évalue d'abord ses paramètres, puis s'exécute. La valeur de z avant et après exécution de printf change donc.

    Mais d'une manière générale, while() attend surtout un argument booléen, même si le type n'existe pas nativement, à proprement parler, en C. Si tu veux que tes deux conditions soient remplies pour que la boucle while se poursuive, il faut utiliser un ET logique « && ». Si au moins une condition remplie suffit, utilise le OU logique « || ».

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    J'ajouterais qu'il faut en général éviter les constructions compliquées qui tentent de faire 36 truc en une seule ligne... Comme tu peux le constater ça rend le code plus difficile à lire.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Par défaut
    Ok, merci, merci beaucoup.

    Désolé de répondre 3 jours après !

    J'ignorais que printf renvoyait le nombre de caractères imprimés mais c'est logique.
    Sinon en effet, il est préférable d'éviter les constructions compliquées, la preuve !

    Dommage qu'on ne puisse pas, avec le debugger, ( j'utilise code blocks ) tester la valeur des expressions un peu comme pour les variables.

    Bonne soirée

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

Discussions similaires

  1. Valeur de retour d'une procédure stockée
    Par Rudyweb dans le forum MFC
    Réponses: 4
    Dernier message: 25/02/2005, 17h52
  2. fonction operator, valeur de retour
    Par butch dans le forum C++
    Réponses: 21
    Dernier message: 20/09/2004, 10h30
  3. [VB6] Valeur de retour pour une Form
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/08/2004, 17h16
  4. Valeur de retour d'une procédure externe
    Par elekis dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 16/04/2004, 16h45
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

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