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 :

Pointeur sur pointeur


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut Pointeur sur pointeur
    Bonjour,
    J'ai une question sur un exercice dans lequel on travaille sur un tableau de chaine de caractere (donc j'ai compris qu'il faut utiliser un tableau de pointeur sur des char).Dans le traitement de ce tableau, on retrouve la supression et l'ajout d'une chaine de caractere dans le tableau.
    De meme, une condition de l'exercice me dis que dans le cas ou mon tableau de chaine de caractere n'a plus de place(sachant que ce tableau a été alloué dynamiquement), on l'agrandit de 5 cases et que s'il posséde 7 cases libres alors on le retrecit de 5 cases.
    J'ai plusieurs erreurs de compilation mais je n'arrive pas à comprendre, je vous met le code de mon programme :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    #include <iostream>
    using namespace std;
     
    const int SIZE=200;
    int main()
    {
    	char letter;
    	int choice,free=0,count=0,index,i,j,k;//numChar,numChar1,
    	float temp;
    	bool found;
    	while(1)
    	{
    		cout<<"1.Enter a new string"<<endl
    			<<"2.Delete a string"<<endl
    			<<"3.Search a string"<<endl
    			<<"4.Print all word which begin by the letter you'll choice"<<endl
    			<<"5.Print all words of all strings"<<endl
    			<<"6.Exit"<<endl
    			<<"Enter your choice : ";
    		cin>>choice;
    		switch (choice)
    		{
    		case 1:if (free==0)
    			   {
    				   for(i=0;i<5;++i)
    				   {
    					   char * *(p+count+i);
    					   *(p+count+i)=new * char;
    					   p+count+i=NULL;
    				   }
    				   free=free+5;
    			   }
    			/*
    			cout<<"How many characters has your string : ";
    			cin>>temp;
    			while (temp-(int)temp!=0 || temp<=0)
    			{
    				cout<<"Integer and strictly positive number please. Enter again : ";
    				cin>>temp;
    			}
    			numChar=(int)temp; 
    			*/
    			*(p+count)=new char[SIZE];
    			gets(*(p+count));
    			++count;
    			--free;
    			break;
    		case 2:
    			for (j=0;j<count;++j)
    			{
    				puts(*(p+j));
    				cout<<endl;
    			}
    			cout<<"What is the index of the string that you want to delete : ";
    			cin>>temp;
    			while(temp-(int)temp!=0 || temp<0 || temp>=count)
    			{
    				cout<<"Wrong value. Enter again : ";
    				cin>>temp;
    			}
    			index=(int)temp;
    			delete *(p+index)[];
    			*(p+index)=NULL;
    			for (int i=index;i<count-1;++i)
    				*(p+i)=*(p+i+1);
    			*(p+count-1)=NULL;
    			--count;
    			++free;
    			if (free>=7)
    			{
    				for (i=0;i<5;++i)
    					delete p+count+free-1-i[]; 
    				free=free-5;
    			}
                break;
    		case 3:/*
    			cout<<"How many characters has the string you're searching : ";
    			cin>>temp;
    			while (temp-(int)temp!=0 || temp<=0)
    			{
    				cout<<"Integer and strictly positive number please. Enter again : ";
    				cin>>temp;
    			}
    			numChar1=(int)temp;
    			*/
    			cout<<"Enter the string you're searching : ";
    		    char str[SIZE];
    			// str=new char[numChar1];
    			gets(str);
    			for (j=0;j<count;++j)
    			{
    				found=true;
    				if (strlen(str)==strlen(*(p+j)))
    				{
    					for (i=0;i<strlen(str);++i)
    						if (*(*(p+j)+i) != *(str+i))
    						{
    							found=false;
    							break;
    					    }
    				}
    				else found=false;
    				if (found)
    					break;
    			}
    			if (j==count)
    				cout<<"The string isn't in the board"<<endl;
    			else
    				cout<<"The string's index in the board is "<<j<<endl;
    			break;
    		case 4:
    			cout<<"Enter the letter : ";
    			cin>>letter;
    			for (j=0;j<count;++j)
    				for(i=0;i<strlen(*(p+j));++i)
    				{
    					if (i==0)
    					{
    						if(**(p+j)==letter)
    						{
    							for(k=0;*(*(p+j)+k)!=' ' && *(*(p+j)+k)!='\0';++k)
    								cout<<*(*(p+j)+k);
    							cout<<endl;
    						}
                        }
    					else
    						if(*(*(p+j)+i)==letter && *(*(p+j)+i-1)==' ')
    						{
    							for(k=i;*(*(p+j)+k)!=' ' && *(*(p+j)+k)!='\0';++k)
    								cout<<*(*(p+j)+k);
    							cout<<endl;
    						}
    				}
    				break;
    		case 5:
    			for (j=0;j<count;++j)
    				for(i=0;i<strlen(*(p+j));++i)
    				{
    					if (i==0)
    					{
    						for(k=0;*(*(p+j)+k)!=' ' && *(*(p+j)+k)!='\0';++k)
    								cout<<*(*(p+j)+k);
    						cout<<endl;
    					}
    					else
    					{
    						for(k=i;*(*(p+j)+k)!=' ' && *(*(p+j)+k)!='\0';++k)
    							cout<<*(*(p+j)+k);
    						cout<<endl;
    					}
    				}
    				break;
    		case 6:
    			return 0;
    			}
    			}
    			}
    Merci
    Ne pas tenir compte des commentaires c'est l'ancienne version de ce que j'ai fais avant modification.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Tes noms de variables sont trop imprécis.
    Tout le code dans le main(), est-ce bien nécessaire ?
    Tu aurais pu poster les erreurs aussi...
    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 régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Merci pour la reponse mais en fait je voudrais savoir si je declare un pointeur p qui pointe sur un pointeur( qui pointe sur un char) alors est ce que je peux utiliser l'allocation dynamique de memoire sur le pointeur p+5 par exemple
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Tu peux.

    Mais généralement, en C++, on n'a pas besoin de pointeurs de pointeur (d'ailleurs, en C, on peut s'en passer avec des structures).
    Si tu veux utiliser l'allocation dynamique, en C++ généralement on utilise des std::vector (mais cela t'est peut-être interdit dans le cadre de cet exercice).

    Edit: Ici, tu trouveras un exemple en C de tableau dynamique de pointeurs:
    http://www.developpez.net/forums/sho...d.php?t=248441
    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.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Merci pour la reponse donc si je comprends bien je pourrais attribuer à p+5 par exemple l'adresse d'un emplacement memoire allouée dynamiquement malgré que p+5 ne soit pas un pointeur(c'est p le pointeur normalement )
    ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Si la variable pp est de type char**, alors:
    • L'expression pp est de type char**
    • L'expression *pp est de type char*
    • L'expression **pp est de type char
    • L'expression pp+5 est de type char ** (cette expression n'est pas une lvalue)
    • L'expression &pp[5] est de type char ** (cette expression n'est pas une lvalue)
    • L'expression *(pp+5) est de type char*
    • L'expression pp[5] est de type char*
    • L'expression *(pp[5]) est de type char (premier char du cinquième tableau)
    • L'expression (*pp)[5] est de type char (cinquième char du premier tableau)
    • L'expression *pp[5] est de type char (mais je ne sais pas à laquelle des deux précédentes ça équivaut)
    • L'expression pp[5][0] est de type char (premier char du cinquième tableau)
    • L'expression pp[0][5] est de type char (cinquième char du premier tableau)

    Et toutes ces expressions sont des lvalues (on peut les mettre à gauche d'un =), sauf quand je précise le contraire.
    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.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Bonsoir,
    En fin de compte j'ai changé ma demarche pour resoudre l'exercice mais j'ai une question:
    si je declare un pointeur sur un pointeur de type char de nom p(char **p) est ce que je peux allouer dynamiquement de la mémoire de cette facon :
    p=new * char[5]; je veux dire par là attribuez à p l'adresse d'une zone mémoire qui contient 5 pointeur de type char .
    Est ce que c'est possible et si oui est ce que la syntaxe est bonne ?
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    C'est possible, mais il faut faire: p=new char*[5]
    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
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Merci pour la réponse ca fonctionne parfait mais j'ai une autre question :
    si je declare un pointeur dans le main et que j'ai besoin d'utiliser ce pointeur(le modifier, etc...) dans une fonction , je dois bien passer le pointeur en parametre de la fonction et dans ce cas si le pointeur est modifié à l'interieur de la fonction, est ce qu'il le sera aussi apres la sortie de la fonction ou est ce qu'il existe une notion de passage de pointeur par référence ?
    Une autre petite question :
    si je declare des pointeur sur un char avec l'allocation dynamique du style
    p=new char*[5]; (p etant de type char** ) puis ensuite je declare un tableau dynamique de char du style *(p+2)=new char[200];
    est ce que je peux utiliser la fonction "gets" pour la saisie de la chaine de caractere de cette facon gets( *(p+2) ); parceque en faisant ca j'ai pas d'erreur de compilation mais le programme n'execute pas cette ligne autrement dis j'ai pas de demande de saisie de chaine de caractere.
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Si tu veux qu'une fonction puisse modifier un pointeur, tu dois soit lui passer le pointeur par référence (la méthode préférée en C++), soit lui passer un pointeur vers ce pointeur (la seule méthode disponible en C, dépréciée en C++).

    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
    #include <iostream>
     
    // Le & dans le paramètre indique un passage par référence.
    void UneFonctionQuiPrendUnPointeurParReference(int * & ptr)
    {
    	++ptr;
    }
     
    int main(void)
    {
    	int deuxEntiers[2] = {10, 20};
    	int *pEntier = &deuxEntiers[0];
     
    	UneFonctionQuiPrendUnPointeurParReference(pEntier);
     
    	//Maintenant, pEntier pointe sur le second entier du tableau.
    	std::cout << *pEntier << std::endl;
    	return 0;
    }
    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.

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Merci pour la reponse je vais donc utiliser la référence sinon pour le probleme de la chaine de caractere avec la fonction gets, peut etre une solution?
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    gets() n'est pas une fonction, gets() est un BUG.

    En C++, pour saisir des chaînes de caractères, on utilise la classe std::string et la fonction std::getline(), toutes deux déclarées dans <string>.
    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.

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Je comprends pas parceque on nous a appris comme ca qu'on pouvait saisir une chaine de caractere avec gets , on n'a pas encore fais la classe string.
    Mais pourtant j'ai deja utilisé gets dans les exercices précédent et ca fonctionne bien .
    Pourquoi dans ce cas ca ne marcherai pas?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    On vous parle de gets() en cours de C++ ?
    Change d'école.


    Exemple:
    Code C++ : 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 <cstdio>
    using namespace std;
     
    void UneFonction(void)
    {
    	char str[10];
    	gets(str);
    }
     
    int main(void)
    {
    	puts("Avant");
    	UneFonction();
    	puts("Apres");
    	return 0;
    }
    Compile ce code sans optimisation (pour être sûr que la fonction ne soit pas inlinée) et entre "abcdefghijklmnopqrstuvwxyz": Le programme plantera avant d'avoir pu afficher "Apres".
    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.

  15. #15
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Ah je vois c'est à cause du nombre de caractere prevu mais pourtant on a appris juste comme ca pour l'instant avec gets donc je sais pas comment faire vu que je n'ai pas le droit d'utiliser ce que je n'ai pas appris.
    Mais si je pose comme hypothese que le nombre de caractere rentrés est bon ce serait normalement possible d'utiliser gets comme je l'ai demandé dans les précedents posts ?(parcque j'ai l'impression que l'instruction n'est pas executée vu qu'on ne me demande pas de saisir de chaines de caracteres quand je le compile)
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Je ne comprends pas ta question.

    Et change d'école:
    • Un prof qui conseille gets() en C est un mauvais prof,
    • Un prof qui conseille gets() en C++ est un très mauvais prof indigne de faire cours.
    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.

  17. #17
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Bah en fait ma question c'est:
    si j'ai declaré un pointeur sur un pointeur de type char (char **) de cette facon " p=new char*[5]; " et qu'ensuite je declare une chaine de caracatere de cette facon " *(p+2)=new char[200]; " est ce que ensuite je peux ecrire
    gets ( *(p+2) ); pour la saisie de la chaine de caractere?
    Parceque je l'ai fais mais la ligne a l'ai de ne pas etre executée.
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Tu peux, mais je te conseille de l'écrire ainsi:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p[2] = new char[200];
    gets(p[2]);
    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.

  19. #19
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2007
    Messages : 257
    Points : 74
    Points
    74
    Par défaut
    Ca marche toujours pas , je poste le code :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    #include <iostream>
    using namespace std;
     
    const int SIZE=200;
    int main()
    {
    	char letter;
    	char **p=NULL,**temp1=NULL;
    	unsigned int choice,create,free=0,count=0,index,i,j,k;
    	float temp;
    	bool found,first=true;
    	while(1)
    	{
    		cout<<"1.Enter a new string"<<endl
    			<<"2.Delete a string"<<endl
    			<<"3.Search a string"<<endl
    			<<"4.Print all word which begin by the letter you'll choice"<<endl
    			<<"5.Print all words of all strings"<<endl
    			<<"6.Exit"<<endl
    			<<"Enter your choice : ";
    		cin>>choice;
    		switch (choice)
    		{
    		case 1:if (first)
    			   {
    				   p=new  char*[5];
    				   free=free+5;
    				   create=5;
    				   first=false;
    			   }
    			   if (free==0)
    			   {
    				   temp1=new  char*[create+5];
    				   for (i=0;i<count;++i)
    				   {
    					   *(temp1+i)=new char[SIZE];
    					   strcpy(*(temp1+i),*(p+i));
    				   }
    				   for (i=0;i<count;++i)
    					   delete *(p+i);
    				   delete p;
    				   p=temp1;
    				   temp1=NULL;
    				   free=free+5;
    			   }
    			*(p+count)=new char[SIZE];
    			cout<<"Enter the string : "<<endl;
    			gets(p[count]);
    			++count;
    			--free;
    			break;
    		case 2:
    			for (j=0;j<count;++j)
    			{
    				cout<<"String index "<<j<<" : "<<endl;
    				puts(*(p+j));
    				cout<<endl;
    			}
    			cout<<"What is the index of the string that you want to delete : ";
    			cin>>temp;
    			while(temp-(int)temp!=0 || temp<0 || temp>=count)
    			{
    				cout<<"Wrong value. Enter again : ";
    				cin>>temp;
    			}
    			index=(int)temp;
    			delete *(p+index);
    			*(p+index)=NULL;
    			for (i=index;i<count-1;++i)
    				*(p+i)=*(p+i+1);
    			*(p+count-1)=NULL;
    			--count;
    			++free;
    			if (free==7)
    			{
    				temp1=new  char*[create-5];
    				for (i=0;i<count;++i)
    				{
    					*(temp1+i)=new char[SIZE];
    					strcpy(*(temp1+i),*(p+i));
    				}
    				for (i=0;i<count;++i)
    					delete *(p+i); 
    				delete p;
    				p=temp1;
    				temp1=NULL;
    				free=free-5;
    			}
                break;
    		case 3:
    			cout<<"Enter the string you're searching : ";
    		    char str[SIZE];
    			gets(str);
    			for (j=0;j<count;++j)
    			{
    				found=true;
    				if (strlen(str)==strlen(*(p+j)))
    				{
    					for (i=0;i<strlen(str);++i)
    						if (*(*(p+j)+i) != *(str+i))
    						{
    							found=false;
    							break;
    					    }
    				}
    				else found=false;
    				if (found)
    					break;
    			}
    			if (j==count)
    				cout<<"The string isn't in the board"<<endl;
    			else
    				cout<<"The string's index in the board is "<<j<<endl;
    			break;
    		case 4:
    			cout<<"Enter the letter : ";
    			cin>>letter;
    			for (j=0;j<count;++j)
    				for(i=0;i<strlen(*(p+j));++i)
    				{
    					if (i==0)
    					{
    						if(**(p+j)==letter)
    						{
    							for(k=0;*(*(p+j)+k)!=' ' && *(*(p+j)+k)!='\0';++k)
    								cout<<*(*(p+j)+k);
    							cout<<endl;
    						}
                        }
    					else
    						if(*(*(p+j)+i)==letter && *(*(p+j)+i-1)==' ')
    						{
    							for(k=i;*(*(p+j)+k)!=' ' && *(*(p+j)+k)!='\0';++k)
    								cout<<*(*(p+j)+k);
    							cout<<endl;
    						}
    				}
    				break;
    		case 5:
    			for (j=0;j<count;++j)
    				for(i=0;i<strlen(*(p+j));++i)
    				{
    					if (i==0)
    					{
    						for(k=0;*(*(p+j)+k)!=' ' && *(*(p+j)+k)!='\0';++k)
    								cout<<*(*(p+j)+k);
    						cout<<endl;
    					}
    					else
    					{
    						for(k=i;*(*(p+j)+k)!=' ' && *(*(p+j)+k)!='\0';++k)
    							cout<<*(*(p+j)+k);
    						cout<<endl;
    					}
    				}
    				break;
    		case 6:
    			return 0;
    			}
    			}
    			}
    Le probleme se situe au niveau du case 1 du switch normalement il devrait me demander de saisir la chaine de caractere , j'ai bien le message "Enter the string " qui apparait mais pas de demande de saisie de chaine .
    Merci

  20. #20
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Est tu sur de l'exercice demandé?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. allocation et pointeur sur pointeur
    Par noobC dans le forum C
    Réponses: 7
    Dernier message: 13/11/2007, 19h00
  2. pointeur sur pointeur générique
    Par j0o0 dans le forum C
    Réponses: 14
    Dernier message: 10/09/2007, 18h52
  3. les pointeurs sur pointeurs ne m'aiment pas :/
    Par GhostNemo dans le forum C
    Réponses: 3
    Dernier message: 17/12/2006, 23h10
  4. Réponses: 6
    Dernier message: 02/11/2006, 16h44
  5. pointeur sur pointeur
    Par gaut dans le forum C
    Réponses: 3
    Dernier message: 01/11/2005, 21h30

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