HELP HELP EN C !!!

cali1983 Messages postés 5 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 17 mai 2005 - 13 mai 2004 à 18:50
cali1983 Messages postés 5 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 17 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();
};

4 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 mai 2004 à 21:31
on donne des pointeurs à scanf et cie :
fscanf(clair,"%c",&lec);

si c'est pour lire un caractère ou un octet, utilise directement fgetc() ou fread();
0
cali1983 Messages postés 5 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 17 mai 2005
14 mai 2004 à 09:10
Merci mais mon erreur n'etait pas la il fallait tout simplement refermer et reouvrir le programme pour le reinitialiser !!!
0
ensiame Messages postés 15 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 15 décembre 2005
14 mai 2004 à 09:43
fscanf te renvoie le nombre de champs convertis, donc faut tester 0, pas EOF
0
cali1983 Messages postés 5 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 17 mai 2005
14 mai 2004 à 12:26
nan nan EOF ca marche mon programme est bon now merci à tous
0
Rejoignez-nous