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 :

tab de caractères , variable tableau non traitée comme une E/S alors qu'elle devrait


Sujet :

C++

  1. #1
    Membre confirmé Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut tab de caractères , variable tableau non traitée comme une E/S alors qu'elle devrait
    Bonjour,

    je fais un petit prog pour trouver le suffixe d'un verbe : c'est que le debut
    j'ai mon tableau char suffixe[2] que j'ai defini dans le main
    je le fais fonctionner dans ma fonction Decoupeverbe
    et dans mon petit if je dis suffixe = "er"

    malheureusement quand je fais cout dans la fonction
    cout<< suffixe << --> j'ai bien er la
    mais dans le main il me l'a pas modifiée
    cout<< suffixe << --> me remet l'initialisation du depart

    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
    #include <iostream>
    using namespace std;
    
    bool DecoupeVerbe (char[], char []);
    
    void main()
    
    {
    	const int TMAX=30;
    	const int TAILLE_SUFFIXE=2;
    	char tabVerbe[TMAX]="developper";
    	cout<<tabVerbe<<endl;
    	char suffixe[TAILLE_SUFFIXE]={'i'};
    
    
    	if( (DecoupeVerbe(tabVerbe,suffixe)==1) )
    	{
    	
    	cout<<"Vous avez entre le verbe "<<tabVerbe<<"."<<endl;
    	cout<<"Nous allons determiner quel est son radical, et quel est son suffixe."<<endl;
    	DecoupeVerbe(tabVerbe,suffixe);
    	cout<<"nous sommes dans le main  **** c pas bon ici il me remet i cet idiot ****"<<suffixe<<endl;
    
    	}
    }
    
    
    
    bool DecoupeVerbe(char tabVerbe[],char suffixe[])
    {
    
    	
    	int taille;
    	taille=strlen(tabVerbe);
    	int avantder=taille-1;
    	if ( (tabVerbe[avantder-1]=='e') && (tabVerbe[taille-1]=='r'))   
    	{
    		suffixe="er";
    		return 1;
    	}
    }
    balises [code] rajoutées par r0d. Merci d'y penser la prochaine fois.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut

    On peut savoir ce que tu essaies de faire ici?

    Tu modifies une variable locale qui ne devrait même pas être modifiable.
    Si tu veux pouvoir modifier suffixe ainsi, déclare-le en char const * et passe-le par référence (&)...
    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.

  3. #3
    Membre expérimenté
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par défaut
    Salut,

    essayes plutôt de reimplementer ta méthode comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    bool DecoupeVerbe(char tabVerbe[],char *  suffixe)
    {
     
     
    	int taille;
    	taille=strlen(tabVerbe);
    	int avantder=taille-1;
    	if ( (tabVerbe[avantder-1]=='e') && (tabVerbe[taille-1]=='r'))   
    	{
    		memcpy(suffixe, "er\0", 3);
    		return 1;
    	}
    }
    Et pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DecoupeVerbe(tabVerbe,&suffixe[0])

  4. #4
    Membre confirmé Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut
    Je ne comprends pas vos réponses et d'ailleurs elles ne marchent pas.

    Je ne peux pas modifier surffixe dans une fonction, car il a eté initialement defini dans le main ? je ne comprends pas , normalement un pointeur est forcement passé par reference non ?

    merci

  5. #5
    Membre confirmé Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut pour néo
    j'ai vraiment un gros bug avec ta soluss "visual doit fermer" message d'erreur et tout

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Un pointeur est une sorte de référence qui est toujours passée par valeur, sauf mention explicite contraire. Passer un pointeur par référence est assez vicieux.

    Et si je puis me permettre, la même chose en C++ me paraitrait moins hasardeuse.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Membre confirmé Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut mais c est du C++ la ...
    ou tu sous entendais qqch que je ne comprends pas ...

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    La manipulation de Neo41 relève plus du C que du C++.

    Utilise le C++, prand un objet de la classe std::string et passe un pointeur ou une référence vers celle-ci à ta fonction...
    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.

  9. #9
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    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
    #include <iostream>
    #include <string>
    std::string rechercheGroupe (std::string const& mot) {
        std::string::const_reverse_iterator it = mot.rbegin();
        if (it != mot.rend()) {
            switch (*it) 
            {
            case 'r':
                ++it;
                if (it != mot.rend()) {
                    switch (*it) 
                    {
                    // 2eme
                    case 'i': return "ir"; // @todo continuer les tests pour les oir...
                    // 1er
                    case 'e': return "er";
                    default: return "";
                    }
                } else return "";
            case 'e': // rechercher les 3e groupe
               ....
            default: return "";
            }
        }
        return false;
    }
    
    int main()
    {
        std::string verbe;
        while ( std::cout << "verbe? " , std::cin>>verbe) {
            std::cout << "Verbe= " << verbe << "\n";
            const std::string groupe = chercheGroupe(verbe);
            std::cout << " --> groupe = " ;
            if (groupe.empty())
                std::cout << "pas un verbe\n\n";
            else
                std::cout <<  groupe << "\n\n";
        }
        return EXIT_SUCCESS;
    }
    Bon. La machine à états me parait un petit peu compliquée. Il doit y avoir des moyens plus intelligents pour procéder.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Membre confirmé Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut la messieurs, je fais vraiment au plus simple,
    quel est le code pour que je puisse modifier suffixe qui a eté defini comme un const char *
    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
     
    #include <iostream>
    using namespace std;
     
    bool DecoupeVerbe (char[], const char *);
     
    void main()
     
    {
    	const int TMAX=30;
    	const char *suffixe;
    	char tabVerbe[TMAX]="developper";
    	DecoupeVerbe(tabVerbe,suffixe);
     
    	cout<<*suffixe<<endl;
    }
     
     
    bool DecoupeVerbe(char tabVerbe[],const char *suffixe)
    {
    	int taille;
    	*suffixe="er";
    	return 0;
    }
    je veux que suffixe puisse etre modifié apres l'appel fonction

    merci encore

  11. #11
    Membre expérimenté
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par défaut
    Le code que j'ai posté marche très bien. Je l'ai bien testé (PS: VS7) avant de le poster, et dans suffixe on retrouve bien "er".

    Je ne sais comment t'as fais pour que ca ne marche pas chez toi

  12. #12
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Avec un pointeur pour le suffixe et pas un tableau comme son code le laissait assez bien entendre. D'où un plantage des plus logiques quand on ne fait pas attention quand on programme en C...

    PS: le '\0' est inutile dans le memcpy. Et d'ailleurs, pour ça, c'est plutôt strcpy que l'on utilise.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  13. #13
    Membre expérimenté
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par défaut
    Citation Envoyé par Luc Hermitte

    PS: le '\0' est inutile dans le memcpy. Et d'ailleurs, pour ça, c'est plutôt strcpy que l'on utilise.
    Je veux bien mais si je ne mets pas le '\0', et vu qu'aucun memset n'a été fait, il y aura des caractères aléatoires après le 'er'.

    En tout cas moi je préfère que ce soit explicite comme ça il n'y a aucun risque.

  14. #14
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Ben non. Tu as utilisé une chaine constante litérale et non pas un tableau. Donc c'est déjà 0-terminé.
    -> cout << sizeof("toto");

    Si tu ne veux pas risques, tu vires char* et autres char[] vu que l'on ne peut pas savoir si la zone de destination sera correcte et assez grande...
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  15. #15
    Membre expérimenté
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par défaut
    Ben si j'ai reutilisé son tableau en mettant sa taille à 3.
    Quelle chaîne constante littérale ?

    Quelque chose m'échappe là...

  16. #16
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    -> affiche sizeof("er\0") et "er\0"[sizeof("er\0")-1]
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  17. #17
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Citation Envoyé par poulette3000
    quel est le code pour que je puisse modifier suffixe qui a eté defini comme un const char *
    je veux que suffixe puisse etre modifié apres l'appel fonction

    merci encore
    Et ça compile, ça?


    Version pointeur:
    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
    #include <iostream>
    using namespace std;
     
    bool DecoupeVerbe(char[], const char * *);
     
    void main()
    {
    	const int TMAX=30;
    	const char *suffixe = NULL;
    	char tabVerbe[TMAX]="developper";
    	DecoupeVerbe(tabVerbe, &suffixe);
     
    	cout<<*suffixe<<endl;
    }
     
     
    bool DecoupeVerbe(char tabVerbe[],const char * * pSuffixe)
    {
    	int taille;
    	*pSuffixe = "er";
    	return false;
    }
    Version référence :
    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
    #include <iostream>
    using namespace std;
     
    bool DecoupeVerbe(char[], const char * &);
     
    void main()
    {
    	const int TMAX=30;
    	const char *suffixe = NULL;
    	char tabVerbe[TMAX]="developper";
    	DecoupeVerbe(tabVerbe, suffixe);
     
    	cout<<*suffixe<<endl;
    }
     
     
    bool DecoupeVerbe(char tabVerbe[],const char * &suffixe)
    {
    	int taille;
    	suffixe = "er";
    	return false;
    }
    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é Avatar de poulette3000
    Profil pro
    Inscrit en
    Août 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 183
    Par défaut finalement je retourne à la bonne vieille methode des tableaux et de strcopy
    on en arrete la merci mssieurs
    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
     
    #include <iostream>
    using namespace std;
     
    bool DecoupeVerbe (char[], char []);
     
    void main()
     
    {
    	const int TMAX=30;
    	char suffixe[2];
    	char tabVerbe[TMAX]="developper";
    	cout<<tabVerbe<<endl;
     
     
    	DecoupeVerbe(tabVerbe,suffixe);
    	cout<<suffixe<<endl;
    	/*if( DecoupeVerbe(tabVerbe,*suffixe)==1 )
    	{
     
    	cout<<"Vous avez entre le verbe "<<tabVerbe<<"."<<endl;
    	cout<<"Nous allons determiner quel est son radical, et quel est son suffixe."<<endl;
    	DecoupeVerbe(tabVerbe,&suffixe[0]);
    	cout<<"nous sommes dans le main "<<*suffixe<<endl;
     
    	}*/
    }
     
     
    bool DecoupeVerbe(char tabVerbe[], char suffixe[])
    {
     
     
    	int taille;
     
    	strcpy(suffixe,"ir");
     
    	return 0;
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2015, 09h20
  2. Réponses: 0
    Dernier message: 21/03/2012, 11h01
  3. Réponses: 0
    Dernier message: 19/03/2012, 15h05
  4. Tableau non contraint dans une structure
    Par chronos dans le forum C
    Réponses: 8
    Dernier message: 07/06/2007, 17h44
  5. Variable générale non trouvée dans une fonction
    Par mickael.be dans le forum Langage
    Réponses: 10
    Dernier message: 21/02/2006, 19h18

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