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 :

Problème tableau de chaînes de caratères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 254
    Par défaut Problème tableau de chaînes de caratères
    Bonsoir,
    J'ai un prob concernant les tableau de chaînes de caratères:
    l'exercice demande qu'a partir de la chaine que l'utilisateur doit taper: une requête select, on doit déterminer les attributs et afficher leurs correspondants en MySql, pour cela j'ai penser faire, un tab pour les mots clés Oracle, et un autre pourles mots clés My sql équivalent, mon prog marche sauf qu'il n'affiche que la premiére lettre de l'élèment du tableau appelé,svp veuillez voir mon code et me corriger la faute que j'ai pas trouvé.
    voici 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
     
     main()
     {
      char *dicOracle[]={"aaa","rrr","Mco3","McO4","McO5"};
      char *dicMySql[]={"BBB","M","FcM3","cM4","McM5"}; //prend seulement a
      char Attribut[20],table[20],AttributEquiv[20];
      char *motCleCourant[20];
      int i,j,posit;
     
      clrscr();//entrer l'attribut puis appuier sur la touche entree
      printf(">Select ");gets(Attribut);clrscr();
     
     
      printf(">Select %s From ",Attribut);gets(table);clrscr();
     
      for(i=0;i<strlen(*dicOracle);i++)
       {
         if(strcmp(dicOracle[i],Attribut)==0)
         {   //copie du contenu du mot cle du tab dicMySql corresponndant … la position i dans AttributEquiv
    	 *AttributEquiv=*dicMySql[i];  //'ex‚cution: ne donne pas la valeur attendue, par exemple si
    	 //je tape select aaa fom tab, normalement l'‚quivalent de aaa donne BBB( ce que ‡a donne c'est seulement B) de meme pour les autres valeurs
    	 // strcpy(*AttributEquiv,*dicMySql[i]);
     
    	     }
     
        }
      printf("L'equivalent de la requete:\n\t >Select %s from %s;\nen MySql est:\n\t >Select %s from %s;",Attribut,table,AttributEquiv,table);
     
      fflush(stdin);
      fflush(stdin);
     getch();
     return 0;
     }

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    Hummm

    Dans ton code j ai vu que tu faisais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char Attribut[20],table[20],AttributEquiv[20];
    ...
    *AttributEquiv=*dicMySql[i];
    ...
    Attention !!!
    Signifie le premier caractere de la chaine de caractere se trouvant à l indice i.

    Ce que tu fais toi, c'est de recopier le premier caractere de dicMySql[i] et de le stocker dans *AttributEquiv (equivalent à AttributEquiv[0])

    Pour t en persuader voici un exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char *s = "youpi";
    // pour avoir acces a la lettre d indice 2, nous ecrirons soit
    s[2]
    // soit
    *(s+2)

    Ce que tu devrais faire c'est plutot eci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char *AttributEquiv;
    ...
    AttributEquiv=dicMySql[i];
    ...
    AttributEquiv est un pointeur de caractere qui pointera sur la adresse du premier caractere de dicMySql[i]. En gros AttributEquiv aura la meme valeur que la chaine de caracteres dicMySql[i]


    J espere que mes explications ont ete assez claires .
    Sinon n hesite pas !!! ^^

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 254
    Par défaut
    Merci, ça fonctionne maintenant, mais seulement pour les 3 premiers élèments des tab dicOracle et dicMySQl, alors svp, pourriez vous, m'aider encore un tout petit peut?
    Je voudrai encore, vous poser une autre question, svp: j'ai mis dans chaque tab, seulement cinq élèment pour tester, mais aprés, je vais mettre les vrais mots clés de oracle ainsi que ceux de my sql, et ça doit avoir, une taille beaucoup plus grande, alors, est ce que le fait que ce code fonctionnera pour cinq élèments, me garanti qu'il fonctionnera pour n'importe quel nombre d'élèment que je met? sinon, qu'est ce que vous me proposerai comme solution?
    Merci encore une fois.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    Merci, ça fonctionne maintenant, mais seulement pour les 3 premiers élèments des tab dicOracle et dicMySQl, alors svp, pourriez vous, m'aider encore un tout petit peut?
    Juste un tout petit peu :p

    regarde dans ta boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    for(i=0;i<strlen(*dicOracle);i++)
    ...
    Ne remarques tu rien ??
    Voila le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *dicOracle est égale à dicOracle[0] qui est la chaine de caractere "aaa". Lorsque tu fais strlen(*dicOracle) tu donne la taille de "aaa" qui est donc 3.
    Pour parcourir tout le tableau tu as 2 solutions :
    - Soit tu crees une variable de type int qui correspond a la taille du tableau.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int tab_size = 5;
    char *dicOracle[]={"aaa","rrr","Mco3","McO4","McO5"};
    char *dicMySql[]={"BBB","M","FcM3","cM4","McM5"};
    int i;
    ....
    for(i=0;i<tab_size;i++)
    ....
    - Soit (la solution que je prefere) tu mets NULL a la find du tableau pour stipuler que c est la fin et tu remplaces la boucle for par la boucle while comme l exemple ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int tab_size = 5;
    char *dicOracle[]={"aaa","rrr","Mco3","McO4","McO5", NULL};
    char *dicMySql[]={"BBB","M","FcM3","cM4","McM5", NULL};
    int i = 0;
    ....
    while (dicOracle[i] != NULL && dicMySql[i] != NULL) {
    ....
          i++;
    }
    Ce qui a de bien avec cette methode, c est que tu n as pas a te soucier de la taille des tableaux, donc de ne pas la mettre a jour apres ajout ou supression d un element.


    Je voudrai encore, vous poser une autre question, svp: j'ai mis dans chaque tab, seulement cinq élèment pour tester, mais aprés, je vais mettre les vrais mots clés de oracle ainsi que ceux de my sql, et ça doit avoir, une taille beaucoup plus grande, alors, est ce que le fait que ce code fonctionnera pour cinq élèments, me garanti qu'il fonctionnera pour n'importe quel nombre d'élèment que je met? sinon, qu'est ce que vous me proposerai comme solution?
    Si cela fonctionne pour un tableau de taille 5, cela doit fonctionner pour un tableau de n importe quel taille.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 254
    Par défaut
    Merci beaucoup, maintenant mon programme fonctionne à merveille, grace à vous.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 10/01/2014, 16h12
  2. Problème tableau de chaînes de caratères
    Par LinuxUser dans le forum C
    Réponses: 49
    Dernier message: 02/05/2007, 10h39
  3. [perl]Problème tableau indexé
    Par LE NEINDRE dans le forum Langage
    Réponses: 8
    Dernier message: 25/08/2005, 21h24
  4. Problème de type chaîne
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/05/2005, 20h23
  5. [CR8] Problème tableau sur plusieurs pages???
    Par christophe28 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 02/11/2004, 15h46

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