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 :

probleme avec des if


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut probleme avec des if
    Bonjour,
    j´ai realiser un programme qui est inclu dans une application en c++ avec pour structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include...
     
    long_nameofmyprogram(parametres )
    {
        if(Why==0)
        {
         ...
         }
         if(Why==1)
         {
         ...
          }
    }
    Est ce qu´il est possible de mettre un if (librairie initialisation) avant le long parce que quand j´essaie j´ai un message d´error
    E2040 declaration terminated incorrectly

    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
     
    #include...
    if()
    {
    long_nameofmyprogram(parametres )
    {
        if(Why==0)
        {
         ...
         }
         if(Why==1)
         {
         ...
          }
    }//fin du long
    }//fin du if
    Mais je ne sais pas si c´est autorise de faire ca.

    En faite je dois verifier si je peux creer une une instance MCR et s´il n´y a pas de probleme avec l´apelle d´une librairie dll cree avec matlab avec des if. Mais je ne peux pas les mettre dans mon long juste en dessous du long car lorsque je sors de la boucle Why=0 le programme retourne au dessous de la boucle why=0 et on ne peux pas appeller deux fois la verification pour creer une instance MCR.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    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
     
    #include...
    if()
    {
    long_nameofmyprogram(parametres )
    {
    if(Why==0)
    {
    ...
    }
    if(Why==1)
    {
    ...
    }
    }//fin du long
    }//fin du if
    Tu peux pas ... cela ferai un morceau de code hors champ de tout code ( enfin je sais pas comment le dire ... )

    Par contre si j'ai bien compris, tu veux que ta fonction soit executer seulement si l'objet à réussi à être créer. Tu peux en rajoutant un flag qui indique si une erreur c'est produite. Ce flag ( boolean ) sera initialisé correctement pour dire si la construction à réussi. Tu vérifie la valeur de ce flag lorsque tu veux executer la fonction.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    Bonjour,
    Je n'arrive pas trop a comprendre le problème en fait...
    Tu as une fonction, et elle doit avoir un comportement different suivant les valeurs de la variable Why ?
    En C++ tu ne peux pas avoir du code qui se ballade tout seul, il doit être soit dans une fonction, soit dans une methode (une fonction qui appartient à une classe)
    Je pense que pour que l'on comprenne mieux le problème tu devrais poster le code de ta boucle.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    merci pour vos reponses, en faite j´utilise une librarie creer avec matlab dans mon programme. Et avant d´utiliser les fonctions de ma librairie je dois faire
    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
     if( !mclInitializeApplication(NULL,0) )
        {
            fprintf(out, "Could not initialize the application.\n");
        	return -1;
        }
        else
        {
         if (!libfinalInitialize())
        {
            fprintf(out,"Could not initialize the library.\n");
            return -2;
        }
        else
        {
       //je dois etre dans cette boucle pour utiliser les fonctions de la librairie
        }
    ce qui me permet de voir si j´ai un probleme ou pas avec les instances dont j´ai besoin pour deployer une librairie creer avec matlab sur un ordinateur ou il n y a pas matlab.
    Le probleme que j´ai c est qu on ne peut appeler !mclInitializeApplication qu´une seule fois. Et moi j´utilise des fonctions de ma libraries dans le why=0 et le why=1. Pour finir, lorsque je parcours ma boucle Why=0 a la fin je dois returner une valeur differente de -1 sinon tout s´arrete mais le probleme c est que si je retourne autre chose que -1 le programme est reparcouru depuis le debut.(la valeur de why change automatiquement des que je sor de why=0) Et donc il refait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     if( !mclInitializeApplication(NULL,0) )
        {
            fprintf(out, "Could not initialize the application.\n");
        	return -1;
        }
        else
        {
         if (!libfinalInitialize())
        {
            fprintf(out,"Could not initialize the library.\n");
            return -2;
        }
        else
        {
    mais la j´ai une erreur car je ne peux pas appeler deux fois InitializeApplication.
    Donc je ne sais pas trop ou mettre ces deux if.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    C'est pas très clair. Tu pourrais remettre toutes les briques ensembles : tous ton code d'initialisation et ton why tels qu'ils sont dans ton source ?

    P.S. fprintf(out) -> std::cout<<
    P.P.S. : if( !mclInitializeApplication(NULL,0) ) et if (!libfinalInitialize()), c'est certainement dans ce genre de cas qu'il faut penser exception.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #include...
    #include'librarie.h'  //library created with matlab
    //y a aussi un include de mon fichier.h avec les methodes de mon .cpp
     
    long_nameofmyprogram(parametres )
    {
        // debut du programme
         if( !mclInitializeApplication(NULL,0) )
        {
            fprintf(out, "Could not initialize the application.\n");
        	return -1;
        }
        else
        {
         if (!libfinalInitialize())
        {
            fprintf(out,"Could not initialize the library.\n");
            return -2;
        }
        else
        {
     
           if(Why==0)
           {
            ...
            return 1;// en retournant 1 je sors de why=0 et why passe a 1 tout seul mais le programme est relu du debut 
            }
            if(Why==1)
            {
            ...
             return 1;//cette fois ci Why reste a 1 et pareil qu avant on retourne au debut du programme, de cette maniere on effectue la boucle why=1 tant qu´un critere n´est pas atteint.Le critere me permet d´arreter le programme avec le return -1. En effet une fois que mon critere est atteint on ne retourne plus dans why=1 et on a le return -1 pour tout stopper. 
            }
     
        libfinalTerminate();
        } // end of loop if with libfinalInitialize()
     
        mclTerminateApplication();
      }// end of  mclTerminateApplication()
     
          return -1;
     
    }
    Le probleme c´est que je ne peux appeler qu´une seule fois: mclInitializeApplication

    mclInitializeApplication allows you to set the global MCR options. They apply equally to all MCR instances. You must set these options before creating your first MCR instance.

    These functions are necessary because some MCR options such as whether or not to start Java™, the location of the MCR itself, whether or not to use the MATLAB JIT feature, and so on, are set when the first MCR instance starts and cannot be changed by subsequent instances of the MCR.

    Caution You must call mclInitializeApplication once at the beginning of your driver application. You must make this call before calling any other MathWorks functions. This also applies to shared libraries. Avoid calling mclInitializeApplication multiple times in an application as it will cause the application to hang.

    After you call mclTerminateApplication, you may not call mclInitializeApplication again. No MathWorks functions may be called after mclTerminateApplication.
    Dites moi si c´est pas assez claire.
    A oui pour le printf, c´est parce que j´apelle une c shared library ( je fais mes tests dans un projet en c )et non une c++ shared library mais on peut utiliser les deux en c++ nan? Cela pose un probleme?

  7. #7
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Dans ta fonction long_nameofmyprogram tu appelles les fonctions d'initialisation de la lib et dans tes blocs if why tu sort de la fonction sans libérer la lib. Donc quan tu rappelles la fonction ça ne passe plus

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Avant de te proposer ma solution, je voudrais attirer ton attention sur quelques conseils "généraux":

    La première qualité d'un code, avant même de faire ce que l'on attend de lui, est d'être facilement lisible / compréhensible par les gens qui posent leurs yeux dessus.

    L'une des choses (car il y en a d'autres) qui permet à un code d'obtenir cette qualité est de respecter des règles strictes de mise en forme en général et d'indentation en particulier.

    Il existe plusieurs sortes de mises en formes, dans lesquelles parenthèses et accolades prennent différentes positions, et je te laisse libre du choix de la forme que tu préfère (personnellement, j'aime bien la forme ANSI ), mais, une chose est sure: une fois que tu as décidé d'une politique de mise en forme, il faut qu'elle reste identique et scrupuleusement suivie, non seulement dans un fichier de code source, mais sur l'ensemble du projet...

    Cela apportera une homogénéité qui ne pourra que renforcer la facilité de (re)lecture et de compréhension de l'ensemble du code

    La deuxième chose sur laquelle je voudrais attirer ton attention est le fait que, en C++, une fonction a d'office un type de retour, qui doit être explicitement donné dans la signature, qu'il s'agisse de seulement déclarer une fonction ou de la définir (l'implémenter).

    Ainsi, lorsque tu implémente long_nameofmyprogram(parametres ), étant donné que la fonction renvoie des valeurs numérique tant inférieures que supérieures à 0, tu devrais (de toute évidence) écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int long_nameofmyprogram(parametres )
    Ceci dit, à la lecture attentive du premier code, et surtout des commentaire, j'aurais tendance à subodorer que:
    • mclInitializeApplication ne doit en tout état de cause n'être appelée qu'une seule et unique fois
    • libfinalInitialize ne peut être appelée (une seule et unique fois) que si mclInitializeApplication a réussi
    • libfinalTerminate ne peut être appelée (une seule et unique fois) que si
      • libfinalInitialize a réussi (et donc que mclInitializeApplication a lui même réussi)
      • la variable why (dont j'ignore tout ) arrive à une valeur qui n'est ni 0 ni 1

    Tout cela m'amène à penser que, soit il n'est pas opportun de créer une boucle qui appelle long_nameofmyprogram, soit les fonctions mclInitializeApplication, libfinalInitialize et libfinalTerminate doivent en sortir.

    La décision sur le sujet sera principalement due aux différents paramètres que tu passe à long_nameofmyprogram et, principalement, au fait qu'il soit possible de déterminer la valeur suivante de ces paramètres de manière automatique (ou par appel de différentes fonction) ou qu'il faille récupérer des valeurs clairement identifiée "ailleurs".

    Dans le premier cas (le fait qu'il soit possible de déterminer la valeur "suivante" sur base de la valeur en cours de test), ta fonction prendrait sans doute une forme proche de
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    int long_nameofmyprogram(parametres )
    {
        /* si l'appel à mclInitializeApplication échoue, nous quittons
         * la  fonction après l'affichage de rigueur
         */
        if(!mclInitializeApplication(NULL,0) )
        {
            /* en C++, on préfère les flux pour l'écriture :D */
            std::cout<<"Could not initialize the library."<<std::endl;
            return -2;
        }
        /* si on arrive ici, mclInitializeApplication a réussi, on tente 
         * d'appeler libfinalInitialize...
         * s'il échoue, on quitte la fonction après l'affichage de rigueur
         */
        if(!libfinalInitialize())
        {
            /* en C++, on préfère les flux pour l'écriture :D */
            std::cout<<"Could not initialize the library."<<std::endl;
            /* au fait, il serait sans doute utile d'appeler une fonction qui
             * "fasse le ménage" de ce qui a été correctement initialisé par
             * l'appel à mclInitializeApplication, non ?
             */
            return -2;
        }
        /* si on arrive ici, l'initialisation s'est bien passée :D 
         * nous pouvons travailler sur la suite, c'est à dire, jusqu'à ce que 
         * why ne vaille ni 0 ni 1
         */
        do
        {
            if(why==0) // ce qu'il faut faire si why vaut 0
            {
            }
            else if(why==1) // et ce qu'il faut faire s'il vaut 1
            {
            }
            /* ne pas oublier de modifier la valeur de parametre dans la 
             * boucle
             */
        }while(why!=0 && why!=1)
        /* si on arrive ici, il faut finaliser l'application et renvoyer -1
        mclTerminateApplication();
        return -1;
    }
    Maintenant, ce code n'a pu prendre en compte que les informations (pour le moins parcellaires) que tu nous as données, même si j'ai fait certaines déductions (qui peuvent d'ailleurs s'avérer tout à fait fausses )

    Aussi, je te conseillerais de lire attentivement ma signature et de réfléchir une bonne fois à ce qu'elle signifie, puis de revenir vers nous en gardant ce conseil primordial:
    aide nous à t'aider: plus tu arrivera à nous indiquer clairement ce que tu souhaite ou le problème auquel tu es confronté, plus nous serons en mesure d'apporter une aide efficace
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    en faite j´ai fait une erreur pour le debut de mon programme,
    Ce n´est pas long_nameofmyprogram(parametres)
    mais long nameofmyprogram(parametres) . Desole.

    Je vai essayer d´expliquer clairement mon probleme :
    En faite il existe deja une application en c++ qui cree un executable. Cette application est assez complexe. Pour modifier ou rajouter des choses dans cette application j´ouvre le projet de l´application avec c++ builder.
    Lorsqu´on lance l´exe, une fenetre s´ouvre dans laquelle on peut choisir quelle methode d´otpimization on veut utiliser.

    Mon projet consiste a rajouter dans cette application une nouvelle methode d´optimisation.
    Pour faire ca il y a un dossier methodes dans l´application (qui comprend plusieurs autres dossiers) dans lequel je met le programme que j´ecrit. En fonction de la methode qu´on choisit d´utiliser en lancant l´application, on apelle telle ou telle methode. Donc si on choisit ma methode on apelle nameofmyprogram. Il y a deja plusieurs methode d´optimization qui ont ete implemente et je suis contraint a utiliser une structure de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    long nameofmethod(parameter)
    {
       if(Why==0)
       {
    Ma methode est de la forme

    long nameofmyprogram(parametres )
    {
    if(!mclInitializeApplication(NULL,0) )
    {
    std::cout<<"Could not initialize the library."<<std::endl;
    return -2;
    }
    if(!libfinalInitialize())
    {
    std::cout<<"Could not initialize the library."<<std::endl;
    return -2;
    }
    if(why==0) // ce qu'il faut faire si why vaut 0
    {
    }
    else if(why==1) // et ce qu'il faut faire s'il vaut 1
    {
    }
    }while(why!=0 && why!=1)

    libfinalTerminate();
    mclTerminateApplication();
    return -1;

  10. #10
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    eurf Tu pourrai indenter un peu... J'ai les yeux qui saignent.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    en faite j´ai fait une erreur pour le debut de mon programme,
    Ce n´est pas long_nameofmyprogram(parametres)
    mais long nameofmyprogram(parametres) . Desole.

    Je vai essayer d´expliquer clairement mon probleme :
    En faite il existe deja une application en c++ qui cree un executable. Cette application est assez complexe. Pour modifier ou rajouter des choses dans cette application j´ouvre le projet de l´application avec c++ builder.
    Lorsqu´on lance l´exe, une fenetre s´ouvre dans laquelle on peut choisir quelle methode d´otpimization on veut utiliser.

    Mon projet consiste a rajouter dans cette application une nouvelle methode d´optimisation.
    Pour faire ca il y a un dossier methodes dans l´application (qui comprend plusieurs autres dossiers) dans lequel je met le programme que j´ecrit. En fonction de la methode qu´on choisit d´utiliser en lancant l´application, on apelle telle ou telle methode. Donc si on choisit ma methode on apelle nameofmyprogram. Il y a deja plusieurs methode d´optimization qui ont ete implemente et je suis contraint a utiliser une structure de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    long nameofmyprogram(parameter)
    {
       if(Why==0)
       {
       }
        if(Why==1)
        {
        }
    }
    ou j´utilise la boucle Why==0 une une seule fois pour l´initialisation de la method et ensuite, une fois sorti de la boucle why=0 le programme est relu a partir du debut et la valeur de why a ete change a 1 afin de pouvoir rentrer dans la boucle why=1. c´est avec la boucle why=1 que le processus iteratif de ma method s´effectue. Je fais plusieurs fois la boucle why=1.
    A la fin de ma boucle why=0 je return quelque chose different de -1 pour ne pas arreter le programe et a la fin de why =1 je return 1 ce qui me permet de lancer plusieurs fois la boucle why=1.Dans la boucle why=1, j´ai une petite structure qui verifie le nombre de fois que j´ai parcouru la boucle why=1 et avec un critere je decide de ne plus retourner dans la boucle why=1 en retournant en -1.


    Ma methode est de la forme

    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
    long nameofmyprogram(parametres )
    {
            if(!mclInitializeApplication(NULL,0) )
            {
             std::cout<<"Could not initialize the library."<<std::endl;
             return -2;
            }
            if(!libfinalInitialize())
            {
             std::cout<<"Could not initialize the library."<<std::endl;
              return -2;
            }
     
                    if(why==0) // ce qu'il faut faire si why vaut 0
                   {
                   }
                   else if(why==1) // et ce qu'il faut faire s'il vaut 1
                   {
                   }
     
     
        libfinalTerminate();
        mclTerminateApplication();
        return -1;
    }
    Du faite que j´utilise une librarie creer avec matlab, j ´ai besoin d´utiliser la structure
    if(!mclInitializeApplication(NULL,0) )
    {
    std::cout<<"Could not initialize the library."<<std::endl;
    return -2;
    }
    if(!libfinalInitialize())
    {
    std::cout<<"Could not initialize the library."<<std::endl;
    return -2;
    }
    dans mon program mais je ne peux le faire qu´une seule fois.

  12. #12
    Membre chevronné Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Par défaut
    Pour cela tu peux utiliser une variable static, qui va mémoriser le fait que tu es déjà passé dans cette fonction.
    Par exemple cette fonction retourne "true" quand elle est appelé la première fois et ensuite toujours "false"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool Fonc()
    {
        static bool First = true;
        if (First)
        {
            First = false;
            return true;
        }
        else
        {
            return false;
        }
    }
    Et ainsi tu peux te servir de ca pour qu'au premier appel tu essaies d'initialiser et tu calculs et puis à tous les appels suivants tu n'initialises plus, tu ne fais que de calculer.

    Remarque :
    Attention, cette methode ne va pas vérifier que l'initialisation est bien faite pour calculer, elle va juste se souvenir que tu as initilisé. Donc si dans une même instance, tu crées, puis détruit et recrée... Je ne garanti pas le comportement à la seconde création : C'est certain ca va planter.

  13. #13
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Je penne à comprendre ce que tu veux faire, mais ça ne serait pas plutôt un truc de ce genre.

    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
    29
    30
    long nameofmyprogram(parametres)
    {
       if(why==0) // ce qu'il faut faire si why vaut 0
         {
            if(!mclInitializeApplication(NULL,0) )
            {
             std::cout<<"Could not initialize the library."<<std::endl;
             return -2;
            }
            if(!libfinalInitialize())
            {
             std::cout<<"Could not initialize the library."<<std::endl;
              return -2;
            }
            return 1;
         }
     
        else if(why==1) // et ce qu'il faut faire s'il vaut 1
         {
            //
            return 1 // ou -1 si c'est fini.
         }
     
        else if(why==-1)
         {
           libfinalTerminate();
           mclTerminateApplication();
           return 0 ;  // ou autre chose
         }
    }
    Car comme tu explique j'ai l'impression que la valeur de retour de ta fonction corespond au why mais peut-être je me trompe.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    Merci pour votre aide.
    en faite je pense que cette structure convient tout a fait :
    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
    29
    long nameofmyprogram(parametres)
    {
       if(why==0) // ce qu'il faut faire si why vaut 0
         {
            if(!mclInitializeApplication(NULL,0) )
            {
             std::cout<<"Could not initialize the library."<<std::endl;
             return -2;
            }
            if(!libfinalInitialize())
            {
             std::cout<<"Could not initialize the library."<<std::endl;
              return -2;
            }
            return 1;
         }
     
         if(why==1) // et ce qu'il faut faire s'il vaut 1
         {
            //
            return 1 // ou -1 si c'est fini.
         }
     
     
           libfinalTerminate();
           mclTerminateApplication();
           return -1 ;  
     
    }
    Mais comment declarer des pointeurs entier et double que j´aimerais pouvoir utiliser dans mes deux boucles, allouer de la memoire avec malloc et reallouer avec realloc.
    par exemple je cree je ne sais pas encore ou : int *tab;
    ensuite je lui alloue de la memoire avec malloc pour n entiers par exemple pour pouvoir utiliser tab dans ma boucle why=0. Et j´aimerais pouvoir ensuite utiliser realloc sur tab dans ma boucle why=1.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    en faite ma question est :
    Si je veux declarer int *tab; et l´utiliser comme suit.
    long nameofmyprogram(parameter)
    {
    if(Why==0)
    {
    tab=(int*)malloc(pdim * sizeof(int));
    }
    if(Why==1)
    {
    tab=(int*)realloc(tab, (pdim+1) * sizeof(int));
    }
    }
    ou est ce que je dois le declarer .Parce que je ne peux pas le declarer comme suit au debut du programe int *tab=NULL; Puisque des que je sortirai d´une boucle le pointeur se reinitialisera. Est il possible de le mettre en dehors de long nameofprogram.

  16. #16
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Eventuellemnt comme cela

    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
    long nameofmyprogram(parameter)
    {
     
        static int *tab=NULL; 
     
         if(Why==0)
          {
              tab=(int*)malloc(pdim * sizeof(int));
          }
     
        if(Why==1)
         {
             tab=(int*)realloc(tab, (pdim+1) * sizeof(int));
         }
    }

  17. #17
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par steph496 Voir le message
    en faite ma question est :
    Si je veux declarer int *tab; et l´utiliser comme suit.

    ou est ce que je dois le declarer .Parce que je ne peux pas le declarer comme suit au debut du programe int *tab=NULL; Puisque des que je sortirai d´une boucle le pointeur se reinitialisera. Est il possible de le mettre en dehors de long nameofprogram.
    Oui.
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    long nameofmyprogram(int *&tab, parameters)
    {
    	//Note: On n'utilise pas new ici, à cause du realloc
    	if(Why==0)
    	{
    		tab = static_cast<int*>( malloc(pdim * sizeof *tab) );
    	}
    	if(Why==1)
    	{
    		tab = static_cast<int*>( realloc(tab, (pdim+1) * *tab) );
    	}
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    merci mais si quand je sors de ma boucle why=0 le programe est relu depuis le debut ca ne risque pas de reinitialiser le pointeur a NULL?
    Je ne peux pas changer les parametres dans nameofprogram, je sais juste que je dois utiliser ces parametres.

  19. #19
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Je ne peux pas changer les parametres dans nameofprogram, je sais juste que je dois utiliser ces parametres.
    C'est ce que j'avais cru comprendre.
    c'est pour cela que je l'ai mis en static dans la fonction.
    Le fait qu'elle soit déclaré static fait qu'elle est initialisé qu'une seule fois même si tu sort et que tu reviens dans ta fonction. C'est un peu comme une variable globale limité à ta fonction.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 116
    Par défaut
    mais je peux quand meme applique des fonctions de type malloc et realloc aux pointeurs que j'ai declare statique? Parce quand on dit statique, ca veut pas dire qu'on ne pas le changer.

Discussions similaires

  1. Probleme avec des structures
    Par lenectar dans le forum C
    Réponses: 17
    Dernier message: 30/12/2005, 09h53
  2. [FLASH MX] Probleme avec des liens.
    Par maxcmoi dans le forum Flash
    Réponses: 2
    Dernier message: 12/11/2005, 11h11
  3. Probleme avec des socket !
    Par Ptimath44 dans le forum Réseau
    Réponses: 11
    Dernier message: 31/10/2005, 18h11
  4. Probleme avec des pointeurs...
    Par barucca dans le forum C++
    Réponses: 5
    Dernier message: 23/08/2005, 21h05
  5. Problemes avec des cellules vides
    Par arsgunner dans le forum ASP
    Réponses: 7
    Dernier message: 14/06/2004, 08h42

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