HELP HELP EN C !!!

Signaler
Messages postés
5
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
17 mai 2005
-
Messages postés
5
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
17 mai 2005
-
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

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
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();
Messages postés
5
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
17 mai 2005

Merci mais mon erreur n'etait pas la il fallait tout simplement refermer et reouvrir le programme pour le reinitialiser !!!
Messages postés
15
Date d'inscription
mercredi 10 mars 2004
Statut
Membre
Dernière intervention
15 décembre 2005

fscanf te renvoie le nombre de champs convertis, donc faut tester 0, pas EOF
Messages postés
5
Date d'inscription
jeudi 13 mai 2004
Statut
Membre
Dernière intervention
17 mai 2005

nan nan EOF ca marche mon programme est bon now merci à tous