Je ne trouve pas ce qui me manque ..

Fermé
nono20013 Messages postés 3 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 8 novembre 2014 - 8 nov. 2014 à 14:49
nono20013 Messages postés 3 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 8 novembre 2014 - 8 nov. 2014 à 23:44
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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
8 nov. 2014 à 17:50
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
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
8 nov. 2014 à 17:53
A moins que ce soit toi qui les as faites ?

On dit "qui les ais faites" ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
8 nov. 2014 à 18:23
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
nono20013 Messages postés 3 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 8 novembre 2014
8 nov. 2014 à 23:44
Merci fiddy, je modofie quelques truces et je reposte mon code ^^
Merci en tous cas a vous deux ;')
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 8/11/2014 à 16:02
'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
nono20013 Messages postés 3 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 8 novembre 2014
8 nov. 2014 à 16:25
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