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 :

Tableau de chaine de caracteres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut Tableau de chaine de caracteres
    Bonjour a tous.

    J'ai un petit soucis avec un tableau de chaine de caracteres. Mon tableau se presente sous la forme ci desous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char Tech[250][20];
    Dans une fonction de mon programme je souhaite ecraser une ligne du tableau par la suivante et faire ce mouvement circulaire jusqu'au bout de mon tableau.

    Dans la meme fonction je reproduis ce fonctionnement avec des tableaux en int et ca marche parfaitement.
    Mais avec le tableau de char ca ne veut pas fonctionner. Ca ne me met pas d'erreur et laisse l'ordre du tableau tel qu'il etait avant.

    Voila mon 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
     
    void suppression(int Inter[], int Prio[], int *i, int *var, int Tech[][20])
    {
         int k, tamp;
         int z=*i, x=*var; 
         printf("\n\nSaisissez le numero de l'intervention a supprimer : ");
         scanf("%d", &tamp);
     
         for (z=0; z<=x; z++)
         {
             if (Inter[z]==tamp)
             {
                for (k=z; k<=x; k++)
                {
                    Inter[k]=Inter[k+1];
                    Prio[k]=Prio[k+1];
                    Tech[k][20]=Tech[k+1][20];
                }
                x=x-1;
             }
         }
         *i=z;
         *var=x;
         return ;
    }
    Si vous comprenez d'ou vient mon probleme je serais ravi de connaitre votre opinion sur le sujet.

    D'avance je vous remercie.

    Cordialement, Pineau.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tech[k][20]=Tech[k+1][20];
    copie l'élément en position (k+1, 20) à la place de l'élément (k,20).

    Ceci ne copie pas du tout le tableau Tech[k+1] (de 20 int) à la place du tableau Tech[k] (de 20 int).
    Pour copier un tableau, il faut copier le tableau élément par élément (ou utiliser une fonction de la bibliothèque comme memcpy qui le fera pour nous). On ne peut pas faire Tableau = quelque chose. Ce sont les seuls types qui ne supportent pas l'assignation (=).

    A noter que les éléments Tech[...][20] sont hors du tableau, l'indice devant être entre 0 et 19

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut
    Je suis débutant et ne comprend pas du tout ce que vous voulez dire concernant cette fonction memcpy.

    J'ai cherché sur le net comment l'utiliser mais ce que j'ai trouvé me parait bien flou.

    Pourriez vous etre plus explicite s'il vous plait ?

    Merci d'avance.

  4. #4
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Dans le cadre de chaines de caractères, tu peux aussi utiliser les fonctions strcpy() et strncpy().

    Un exemple dans la FAQ pour l'utilisation de strcpy():
    Comment créer un tableau de chaînes de caractères ?

    Sinon tu peux aussi jeter un coup d'oeil sur:
    man strcpy() et strncpy()

    Mais peut être dois tu coder ces fonctions de la bibliothèque standard toi même en guise d'entrainement?


  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    La fonction memcpy permet de copier un nombre de bytes spécifiés (3° argument) d'un tableau (2° argument) à un autre (1er argument) (qui ne chevauche pas le premier)
    Dans le cas présent, on peut envisager
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (k=z; k<=x; k++)
                {
                    Inter[k]=Inter[k+1];
                    Prio[k]=Prio[k+1];
                    memcpy( Tech[k],Tech[k+1], 20*sizeof(int));
                }
    Sinon, il reste la possibilité de copier directement les éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (k=z; k<=x; k++)
                {
                    Inter[k]=Inter[k+1];
                    Prio[k]=Prio[k+1];
                    for (m=0; m<20; m++) Tech[k][m] = Tech[k+1][m];
                }

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pineau Voir le message
    J'ai un petit soucis avec un tableau de chaine de caracteres. Mon tableau se presente sous la forme ci desous :
    Ne me dit pas que tu veux faire un liste circulaire en déplaçant les données ? Ce serait une grave faute de conception.

    Si c'est le cas, il faut dare-dare lire un article sur les structures de données, et notamment les FIFO (files).

    http://nicolasj.developpez.com/articles/file/

    Ce sont les indices que l'on modifie, jamais les données (sauf remplacement, évidemment).

    http://emmanuel-delahaye.developpez.com/clib.htm
    Modules FIFO (octets), GFIFO (FIFO générique)

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Par défaut
    Merci Diogene,en y reflechissant hier soir en rentrant chez moi j'ai pensé a cette solution (avec une boucle for), je l'ai testé et ca marche tres bien.

    Par contre je suis desole Emmanuel mais si en effet c'est exactement ce que je fait. Je me doute que ca ne doit pas etre tres conventionnel mais mon but premier est que ca marche. J'ai du apprendre tout ca tout seul et me debrouiller pour comprendre les centaines de pages internet qui en parle (et qui pour un debutant ne sont pas tres facile ... ).

    Donc oui, j'ai opté pour un systeme circulaire pour re créer mon tableau.

    Cela dit, mon programme fonctionne desormais tres bien.
    J'ai encore un peu de temps avant de le rendre ce qui maintenant me laisse le temps de le revoir et de tenter de l'améliorer.

    Je vous remercie tous pour vos réponses rapides et precises.
    Cordialement Pineau.

Discussions similaires

  1. tableau de chaine de caractere avec pointeur
    Par Oussama1 dans le forum C++
    Réponses: 7
    Dernier message: 15/12/2008, 13h12
  2. Malloc tableau de chaine de caractere
    Par firemax dans le forum C
    Réponses: 14
    Dernier message: 05/11/2007, 15h23
  3. Réponses: 7
    Dernier message: 01/12/2006, 21h28
  4. conversion tableau vers chaine de caractere
    Par sneb5757 dans le forum Réseau
    Réponses: 6
    Dernier message: 12/11/2006, 22h31
  5. [Tableaux] tableau de chaine de caractere
    Par Tempotpo dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2006, 13h54

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