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 :

Gerer beaucoup d'option en evitant else if


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Par défaut Gerer beaucoup d'option en evitant else if
    Bonjour, je dois faire une fonction my_printf qui reproduit ce que fait printf. Pour le moment mon programme ne gere que 3 options. Et j'utilise des if et des else if, mais sachant que printf propose beaucoup de d'options, j'aimerais eviter d'utiliser des else if, y'a t'il une autre methode ?
    J'ai pas le droit d'utiliser le switch non plus et mes fonctions ne doivent pas depasser 25 lignes (-1 par lignes en trop)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 108
    Par défaut
    Options ?
    Qu'appelles-tu options ?

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Par défaut
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("%d", 666) //affiche des decimaux avec l'option %d
    printf("%s", "Hello") //affiche des chaines avec l'option %s
    Pour le moment je gere juste %d, %c et %s avec des if et else if, pour les reste des options il suffit de faire la meme chose, mais j'aimerais eviter d'avoir 20 else if

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nono212 Voir le message
    Options ?
    Qu'appelles-tu options ?
    Il doit probablement parler des formats "%d", "%f" etc...

    Citation Envoyé par jayfaze Voir le message
    Bonjour, je dois faire une fonction my_printf qui reproduit ce que fait printf. Pour le moment mon programme ne gere que 3 options. Et j'utilise des if et des else if, mais sachant que printf propose beaucoup de d'options, j'aimerais eviter d'utiliser des else if, y'a t'il une autre methode ?
    J'ai pas le droit d'utiliser le switch non plus et mes fonctions ne doivent pas depasser 25 lignes (-1 par lignes en trop)
    Utiliser un tableau de structure. Chaque structure associant à la fois
    - le format attendu
    - l'action associée au format sous forme de pointeur de fonction (tiens, ça me rappelle un autre topic dans le même genre => http://www.developpez.net/forums/sho...d.php?t=443335 à croire que tous les étudiants viennent ici se faire aider !!!)

    Ensuite, si ta fonction ne doit pas dépasser 25 lignes (???) ben rien ne t'interdit de réduire au maximum les lignes (supprimer les accolades dans les blocs qui n'ont qu'une seule instruction) et au pire de l'écrire sur une seule ligne !!!
    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]

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Par défaut
    ok merci !
    à croire que tous les étudiants viennent ici se faire aider !!!
    Ouais, dans l'ecole de je suis on ne donne pas les cours avant l'exo, donc on doit se debrouiller par sois meme pour trouver la solution !
    Et on ne dois pas depasser les 25 lignes, je sais pas pourquoi !
    J'ai jamais fait de pointeur sur fonction, donc voila une occasion de taper dedans
    supprimer les accolades dans les blocs qui n'ont qu'une seule instruction)
    Ouais, je le fais deja

    et au pire de l'écrire sur une seule ligne
    Une ligne ne dois pas faire plus de 80 caracteres
    Avec ce que tu m'a dit, je pense m'en sortir sans avoir de point en moins !

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Je sais pas si réduire le nombre de lignes permettra de rendre le code plus clair.
    Ton école est bizarre.

    Juste pour info, un pointeur de fonction est une variable comme une autre, tu déclares un pointeur de fonction comme ça :

    type_de_retour (*nom_var)(type_param1, type_param2, ...);
    Ce qui donne par exemple pour une fonction prenant un nombre indéfini de paramètre et retourné un int :
    Ensuite, pour affecter une à ce pointeur c'est comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int nomDeMaFonction(int var);
    // Plus loin...
    fonc = nomDeMaFonction;
    Il faut bien sûr que la fonction soit définie avant ou au moins prototypée. On remarque par la même occasion, que le nom de la fonction représente son adresse lorsqu'il n'y a pas les parenthèses.

    Et pour appeler une fonction affectée à un pointeur de fonction, il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour = fonc(var1, var2);

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par PsychoH13 Voir le message
    Juste pour info, un pointeur de fonction est une variable comme une autre, tu déclares un pointeur de fonction comme ça :

    type_de_retour (*nom_var)(type_param1, type_param2, ...);
    Ce qui donne par exemple pour une fonction prenant un nombre indéfini de paramètre et retourné un int :
    Non ! Il n'y a pas "un nombre indéfini de paramètres", il n'y a pas de paramètre du tout !!!

    Citation Envoyé par PsychoH13 Voir le message
    On remarque par la même occasion, que le nom de la fonction représente son adresse lorsqu'il n'y a pas les parenthèses.
    C'est pour ça qu'on peut stocker cette adresse dans un "pointeur"

    Citation Envoyé par PsychoH13 Voir le message
    Et pour appeler une fonction affectée à un pointeur de fonction, il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour = fonc(var1, var2);
    NON ! Il suffit de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour = (*fonc)(var1, var2);
    Puisque "fonc" représente un pointeur, pour appeler le pointé (le code de la fonction) il faut utiliser l'étoile (pointé)
    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]

  8. #8
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Puisque "fonc" représente un pointeur, pour appeler le pointé (le code de la fonction) il faut utiliser l'étoile (pointé)
    Non justement pour un pointeur de fonction ça n'est pas nécessaire.
    De plus la notation int(*fonc)() est particulière et n'est pas équivalente à int(*fonc)(void) mais sert à simuler un pointeur générique de fonction.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Non ! Il n'y a pas "un nombre indéfini de paramètres", il n'y a pas de paramètre du tout !!!

    C'est pour ça qu'on peut stocker cette adresse dans un "pointeur"


    NON ! Il suffit de faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour = (*fonc)(var1, var2);
    Puisque "fonc" représente un pointeur, pour appeler le pointé (le code de la fonction) il faut utiliser l'étoile (pointé)
    À tout ça je réponds un petit test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <stdio.h>
     
    int f1(void)
    {
        return 5;
    }
     
    int f2(int var)
    {
        return var;
    }
     
    int main(void) {
    	int (*fptr1)();
        int (*fptr2)(void);
     
        fptr1 = f1;
        printf("%d\n", fptr1());
        fptr1 = f2;
        printf("%d\n", fptr1(6));
     
        fptr2 = f1;
        printf("%d\n", fptr2());
        fptr2 = f2; // warning: assignment from incompatible pointer type
        printf("%d\n", fptr1(6));
     
    	return 0;
    }
    Donc, lorsque j'affecte une fonction de type int (*)(void) à un pointeur de type int (*)(), il ne me dit rien, pas plus que lorsque la fonction prend un argument, donc c'est bien ce que je dis c'est un nombre indéfini d'arguments. Par contre, lorsque le pointeur de fonction est de type int (*) (void), là j'ai un warning lorsque j'affecte une fonction avec un argument.

    De plus, lorsque j'appelle mes fonctions à l'aide des pointeurs, je ne mets pas d'étoile, et ça marche quand même...

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Par défaut
    Citation Envoyé par jayfaze Voir le message
    Ouais, dans l'ecole de je suis on ne donne pas les cours avant l'exo, donc on doit se debrouiller par sois meme pour trouver la solution !
    quand on oublie, on évite de dire qu'on n'a pas eu les cours ....

Discussions similaires

  1. [RegEx] Eviter de répéter l'option \s (espace) ?
    Par FrontLine dans le forum Langage
    Réponses: 1
    Dernier message: 20/07/2008, 01h48
  2. Gerer par code les Options d'un DBGrid
    Par franck SEFIC dans le forum Delphi
    Réponses: 11
    Dernier message: 04/05/2007, 18h38
  3. Eviter 25 if else
    Par lechewal dans le forum C
    Réponses: 7
    Dernier message: 19/05/2006, 17h51
  4. [Forum] Gérer les if et else
    Par stomerfull dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 21
    Dernier message: 20/02/2006, 23h20
  5. gerer les ' dans une chaine pour eviter erreur sql
    Par Malone dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2005, 14h27

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