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 :

Fonction ne retournant pas toujours une valeur


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Fonction ne retournant pas toujours une valeur
    Bonjour,

    j'ai développé cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int f(BOOL condition,int x,int y){
     if (condition)
         return x*y;
    }
    Comment fais-je dans ce cas ? En effet, si la condition est valide, en retour il y aura le résultat de x*y mais que se passe-t-il si la condition n'est pas valide ?

    Au revoir

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    n'importe quoi !
    Il faut que tu renvoies une valeur impossible et que tu testes ce retour pour savoir que tu ne dois pas tenir compte du résultat.

  3. #3
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par mastochard
    Comment fais-je dans ce cas ?
    Rajoute un "else" et renvois quelque chose de cohérent.

  4. #4
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Ou une astuce à la con:utiliser des pointeurs dont la valeur "NULL" peut être utilisée pour signifier cette abscence de résultat; mais ça risue de compliquer le programme et ça revient à utiliser une valeur particulière.

  5. #5
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par mastochard
    Bonjour,

    j'ai développé cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int f(BOOL condition,int x,int y){
     if (condition)
         return x*y;
    }
    Comment fais-je dans ce cas ? En effet, si la condition est valide, en retour il y aura le résultat de x*y mais que se passe-t-il si la condition n'est pas valide ?

    Au revoir

    indique que la fonction retourne un int. toujours

    Si tu ne retournes rien, ton compilateur risque de chier une pendule.

    Donc soit tu fait retourner un resultat impossible a ta fonction, pour que du cote de l'appelant tu saches que la condition n'a pas ete verifiee, soit tu te debrouille pour faire le test dans l'appelant.

    Une fonction en C finit toujours par un return. Et une fonction de type int retourne toujours un int.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mastochard
    j'ai développé cette fonction:
    t'aurais pas du !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int f(BOOL condition,int x,int y){
     if (condition)
         return x*y;
    }
    Comment fais-je dans ce cas ? En effet, si la condition est valide, en retour il y aura le résultat de x*y mais que se passe-t-il si la condition n'est pas valide ?
    Mauvaise conception. Le return doit être unique et être la dernière instruction de l'instruction. Mais en fait, c'est la fonction qui est mal organisée. Le test n'a rien à faire ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int f(int x,int y)
    {
       return x*y; /* EDIT */
    }
     
    ...()
    {
       if (condition)
        {
          resultat = f (a, b);
        }
    }
    tout simplement... sinon, ça risque d'être extrêment tordu...

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Jack_serious
    soit tu te debrouille pour faire le test dans l'appelant.

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    En fait c'est bien pratique les exceptions en C++...

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (condition)
        {
          resultat = f (a, b);
        }
    C bien ce qui me semblait, si si, je vous assure.
    Merci.
    Au revoir

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jack_serious
    Une fonction en C finit toujours par un return. Et une fonction de type int retourne toujours un int.
    Et une fonction de type void, ca doit aussi posseder un return..?

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par NaeiKinDus
    Et une fonction de type void, ca doit aussi posseder un return..?
    oui, mais il est implicite

  12. #12
    Invité
    Invité(e)
    Par défaut
    Donc pas la peine d'en mettre si c'est implicite
    Merci pour la reponse ^_^

  13. #13
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Pourquoi "return =" et pas "return" tout court?

  14. #14
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    parce qu'il a pas encore compilé son prog

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Trap D
    parce qu'il a pas encore compilé son prog
    Corrigé.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/04/2020, 17h57
  2. Chemins de code de retournant pas forcément une valeur
    Par Tanoak_LaCapuche dans le forum C#
    Réponses: 3
    Dernier message: 12/07/2012, 15h44
  3. Réponses: 9
    Dernier message: 17/10/2011, 12h41
  4. WebPart - Tous les chemins ne retournent pas nécessairement une valeur
    Par Spitfire378 dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 25/05/2011, 08h41
  5. Réponses: 3
    Dernier message: 19/12/2007, 14h50

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