cali1983
Messages postés5Date d'inscriptionjeudi 13 mai 2004StatutMembreDernière intervention17 mai 2005
-
13 mai 2004 à 18:50
cali1983
Messages postés5Date d'inscriptionjeudi 13 mai 2004StatutMembreDernière intervention17 mai 2005
-
14 mai 2004 à 12:26
Voilà j'ai un problème pour crypter un texte j'ai fais un programme il n'a aucune erreur si ce n'est qu'il veut pas faire ce que je dis.
Il ne veut pas executer la boucle de validation du caractere qui est
while(fscanf(clair,"%c",lec)!=EOF)
{...};
avec clair le fichier
et lec le caractere de ce fichier que je veux crypter.
Voilà mon programme développé en C++ builder
Merci de m'aider j'en peux plus.
#include <stdio.h>
#include <string.h>
#include
#include <ctype.h> //bibliotheque de travail sur les caracteres
//---------------fonction comptant le nb de caractere dans mon fichier----------
int nbcaractere (FILE *f)
{
char lec; //caractere lu dans le fichier
int nbcar=0;
while(fscanf(f,"%c",&lec)!=EOF) //tant que ce n'est pas la fin du fichier
nbcar++;
printf("Voici le nombre de caractere dans la boucle de comptage : %d\n",nbcar);
return(nbcar);
};
//-------------------fonction verifiant si c'est une lettre---------------------
bool valide(char PAR1)
{
bool ret=0; //faux
int j;
char cha_val[53]={"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"};
for (j=0;j<52;j++)
{
if(cha_val[j]==PAR1)
{
printf("La lettre %c est valide\n",PAR1);
ret=1;
};
};
return ret;
};
//-----------fonction qui determine le rang de ma lettre dans l'alphabet--------
int alphabet(char PAR2)
{
int i,rang;
char alphabetb[27]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
for(i=0;i<26;i++)
{
printf("%c",alphabetb[i]);
if (PAR2==alphabetb[i])
rang=i;
}
printf("essai dans la fonction %d\n",rang) ;
return rang;
};
//------------------------------Début du programme------------------------------
void main(void)
{
int nbcaractere (FILE *f); //declaration des fonctions
bool valide(char PAR1);
int alphabet(char PAR2);
bool vali; //declaration des variables
FILE *clair,*cle,*crypto;
char adresseclair[1000],lec,adressecle[1000],*chaine_clair,*chaine_cle[26],adressecrypto[1000];
int nbcara,i,j,reste,*code_cle[26],ranglettre,paritelettre;
printf("Veuillez taper l'adresse du fichier a analyser\n"); //demande de l'adresse du fichier a analyser
scanf("%s",&adresseclair);
clair=fopen(adresseclair,"r");
if (clair==NULL) //verif que le fichier existe
printf("Le fichier n'existe pas ou n'est pas valide\n");
nbcara=nbcaractere(clair); //recherche du nb de cara du fichier
chaine_clair= (char*)malloc(nbcara); //allocation de memoire pour la chaine en fonction de la taille du fichier
i=0;
while (fscanf(clair,"%c",lec)!=EOF) //traitement de chaque caractere du fichier tant que l'on a pas EOF
{
vali=valide(lec); //verification que ce caractere est une lettre
printf("nb caractere valide %d lettre testee %c\n",i,lec);
if (vali==1)
{
toupper(lec); //transformation en majuscule si c'est une minuscule et laisse tel quel si c'est une majuscule
chaine_clair[i]=lec;
i++;
};
};
nbcara=i; //nouvelle taille du tableau apres suppression des caracteres non valide
reste=nbcara%2;
if(reste==0)
{
chaine_clair[nbcara]=chaine_clair[nbcara+1];
nbcara++;
};
printf("nb de caractere calcule %d\n",nbcara);
for(i=0;i<nbcara;i++)
printf("%c\n",chaine_clair[i]);
fclose(clair);
printf("Veuillez taper l'adresse du fichier contenant la cle\n"); //demande de l'adresse du fichier a analyser
scanf("%s",&adressecle);
cle=fopen(adressecle,"r");
for(i=0;i<52;i++)
{
for(j=0;j<26;j++)
fscanf(cle,"%c",&chaine_cle[i]);
for(j=26;j<52;j++)
fscanf(cle,"%d",&code_cle[i]);
};
fclose(cle);
printf("Veuillez taper l'adresse ou vous voulez enregistrer le cryptogramme\n"); //demande de l'adresse du fichier a analyser
scanf("%s",&adressecrypto);
crypto=fopen(adressecrypto,"w");
for(i=0;i<nbcara;i++)
{
ranglettre=alphabet(chaine_clair[i]);
printf("esssai ranglettre=%d\n",ranglettre);
paritelettre=ranglettre%2;
if(paritelettre==0) //lettre a un rang paire donc cryptage par chiffre
{
printf("%d",code_cle[ranglettre]) ;
fprintf(crypto,"%d",code_cle[ranglettre]);
}
else //lettre a un rang impair donc cryptage par lettre
{
fprintf(crypto,"%c",chaine_cle[ranglettre]);
printf("%c",chaine_cle[ranglettre]);
};
};
fclose(crypto);
getchar();
getchar();
};