Je ne trouve pas ce qui me manque ..

nono20013 Messages postés 3 Statut Membre -  
nono20013 Messages postés 3 Statut Membre -
bonjour à tous,

je suis actuellement en train de réalisé un projet qui consiste a traduire une chaine de caractère passée en parametre avec donc 2 alphabets différents . Nous avons donc au total 3 arguments. je vous met le code si dessous :

int     translator(char *argv1, char *argv2, char *argv3)
{
  int   i;
  int   b;

  b = 0;
  while (argv1[i] != '\0')
    {
      while (argv2[i] != '\0')
        {
          if (argv2[b] == argv3[b])
            {
              my_putchar(argv2[i]);
            }
          else if (argv2[b] != argv3[b])
            {
              my_putchar(argv3[i]);
            }
          i = i + 1;
	}
      b = b + 1;
      i = 0;
    }
  return (i);
}

int     main(int argc, char **argv)
{
  int   i;

  i = 0;
  translator(argv[1], argv[2], argv[3]);
  my_putstr(argv[1]);
  my_putchar('\n');
}


je n'arrive pas a trouvé soit ce qu'il me manque pour que mon programme puisse marché (car mon programme compile), soit ou est l'erreur dans mon programme .
Si j'ai oublié des infos, dites le moi !
Merci d'avance à tous ce qui pourront m'aidé.

cordialement,

nono

3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Comme dit par gravgun, les noms d'argument sont mal choisis (là ce n'est pas une question de "trouver les erreurs" mais d'avoir un code plus parlant pour les autres...).
    Donc plutôt que argv1 pourquoi ne pas mettre chaine ?
    De même pour argv2 et argv3.
    D'ailleurs, je te conseillerai de vérifier le nombre d'arguments avant d'utiliser argv... Et les commentaires ? Cela nous serait utile pour comprendre ton programme ou alors décris-nous plus ce que doit faire la fonction.

    Pourquoi utiliser my_putchar() au lieu de putchar() de même pour putstr. Les fonction my_... ne sont pas portables... A moins que ce soit toi qui les as faites ?

    T'aurais même pu faire une fonction supplémentaire pour
    while (argv1[i] != '\0')
    Oui mais comme i n'est pas initialisé, il y a de forte chance que ça crash.

    else if (argv2[b] != argv3[b])
    Ce n'est pas logique, c'est en fait un pléonasme. Si tu es dans le else, c'est que tu es sûr d'avoir cette condition...


    while (argv1[i] != '\0')
    {...
    i = 0;}

    Ca sent la boucle infinie ça...

    while (argv2[i] != '\0')
    Pourquoi commencer à l'indice i ? C'est pas logique, on commence plutôt du début de l'alphabet, donc b plutôt.

    En relisant ton code, j'ai l'impression que tu as mélangé les variables i et b...

    N'hésite pas à reposter ton code en tenant compte de nos remarques pour qu'on y voit plus clair, si jamais ton problème persiste.

    Cdlt,
    1
    1. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      A moins que ce soit toi qui les as faites ?

      On dit "qui les ais faites" ;)
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Oups. D'ailleurs, j'ai aussi oublié le "ne".
      Sinon, le subjonctif de l'auxiliaire avoir à la deuxième personne est "aies" et non "ais" ;-)
      0
    3. nono20013 Messages postés 3 Statut Membre
       
      Merci fiddy, je modofie quelques truces et je reposte mon code ^^
      Merci en tous cas a vous deux ;')
      0
  2. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut, pas super descriptif comme nom ça,
    argv1, argv2, argv3
    ... on ne sait pas a quoi ça correspond: est-ce la chaine a traduire, un alphabet de référence?

    Et ton algorithme est très peu compréhensible; surtout qu'il ne s'arrête jamais:
    while (argv1[i] != '\0')
    n'évaluera à
    true
    (donc sortira du
    while
    ) uniquement si argv1 est vide (contient que
    \0
    ), car a chaque fin d'itération tu fais
    i = 0;
    .
    Je pense que tu voulais mettre
    while (argv1[b] != '\0')
    .

    Donc pour chaque caractère de argv1, tu itèrerais sur le contenu d'argv2... Et après je pige plus, b est le compte d'itération d'argv1, et tu compares l'emplacement b de argv2 et argv3? Quel bazar, je ne vois pas la logique.

    Un conseil: refais ton code depuis le début, avec des noms plus concis ;)
    from human import idiocy
    del idiocy
    0
  3. nono20013 Messages postés 3 Statut Membre
     
    le probleme pour moi c'est que j'arrive pas a trouvé les erreurs .. dans la logique le code est bon, enfin je pense ..

    argv1 représente la chaine a traduire.
    argv2 représente l'alphabet 1.
    argv3 représente l'alphabet 2.

    nono
    0