Besoin pour probleme code de cesar

fearwhite Messages postés 3 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 26 mars 2008 - 25 mars 2008 à 19:48
fearwhite Messages postés 3 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 26 mars 2008 - 26 mars 2008 à 11:10
Bonjour, a tous je commence dans le langage C et j'ai codé un programme sur la base du code de cesar :

#include <stdio.h>
#include <stdlib.h>


static void purger(void)
{
    int c;


    while ((c = getchar()) != '\n' && c != EOF)
    {}
}


int main(void)
{
    char texte[255] ;
 char codage[255] ;
 long nbrdecalage  ;
 long util = 1 ;
 long i=0 ;
    printf("                          ***********************\n");
    printf("                             ******  Bonjour  ******\n");
 printf("                             ***********************\n\n\n");
 printf("Bienvenue dans le programme de cryptage et de decryptage d'une phrase\n\n");
 printf("Choisissez :\n\n");
 printf("1-Cryptage\n\n");
 printf("2-Decryptage\n\n");
 scanf("%ld", &util);
 printf("\n");
if (util == 1)
{
  printf("Bienvenue dans le programme de cryptage d'une phrase\n\n");
  printf("Choisissez votre decalage :\n\n");
  scanf("%d", &nbrdecalage);
  printf("\n");
  purger();
  printf("Saisissez votre texte\n\n");
  fgets(texte,sizeof texte ,stdin);
   for(i=0;texte[i]!='\0';codage[i] = (texte[i]+nbrdecalage)%256,i++) ;
  printf("Voici le message crypte :\n\n\t%s", codage);
  printf("\n");


 




}
else if (util == 2)
{
  printf("Bienvenue dans le programme de decryptage d'une phrase\n\n");
  printf("Choisissez votre decalage :\n\n");
  scanf("%d", &nbrdecalage);
  printf("\n");
  purger();
  printf("Saisissez votre texte\n");
  fgets(texte,100 ,stdin);
   for(i=0;texte[i]!='\0';codage[i] = (texte[i]-nbrdecalage)%256,i++) ;
  printf("Voici le message crypte :\n %s", codage);
  printf("\n");




}
else
{
printf("Redemarrez le programme & choisissez une option valide\n\n");
}


    system("PAUSE");
 return 0;
}

Le probleme est que quand je rentre une phrases des caratères s'affiche a la fin du resultats du codage
http://www.hostingpics.net/viewer.php?id=719635prog.jpg
Si quelqun pouvait m'aider ^^
merci d'avance

4 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
25 mars 2008 à 21:04
C'est juste que tu oublies de copier le '\0' dans le résultat

for(i=0;texte[i]!='\0';codage[i] = (texte[i]+nbrdecalage)%256,i++) ;

->

for(i=0; texte[i]; i++)
{
    codage[i] = (texte[i]+nbrdecalage)%256; // Ca sert a rien de tout mettre dans le for, et c'est illisible
}
codage[i] = 0;
_____________________________________
Un éditeur de ressources gratuit pour Windows
0
fearwhite Messages postés 3 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 26 mars 2008
25 mars 2008 à 21:33
Merci la reponse rapide mais le probleme est toujours present
0
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
26 mars 2008 à 01:37
1) Remplacer les fgets() par gets().
2) Ajouter les zéros binaires à la fin des chaînes codées.
3) Ne pas mélanger les gestions de boucles avec le traitement des boucles !

      printf("Saisissez votre texte\n\n");
      gets(texte);
      for (i=0 ; texte[i]!=0 ; i++)
         codage[i] = (texte[i] + ou - nbrdecalage) % 256;
      codage[i] = 0;

4) Et attention au cas où le résultat du modulo 256 donnera un zéro binaire !

Jean-François
0
fearwhite Messages postés 3 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 26 mars 2008
26 mars 2008 à 11:10
Merci bc sa marche
0