Codage et décodage d'un fichier en C

sigmaaaa Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai une exo dans le TP comme ça: http://robinson.graas.p.luminy.univmed.fr/pub/INF2N/tps/tp10/tp10a.jpeg

J'ai faire les codes pour cette exo mais je peux pas finir la 3me question, c-à-d la partie "codage". Voici mes codes:

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

void decoder(FILE *f1, FILE *f2)
{
    int i, n, c;
    do
    {
		fscanf(f1, "%d", &n);
		fscanf(f1, "%d", &c);
		for (i = 0; i < n; i++)
		{
			fputc(c, f2);
		}
    } while (!feof(f1));
	printf("Decodage réussi\n");
	fclose(f1);
	fclose(f2);
}

void coder(FILE *f1,FILE *f2)
{
    int c;
    c=fgetc(f1);
    while (!feof(f1))
    {
        fprintf(f2,"%d",c);
        c=fgetc(f1);
    }
    printf("Codage réussi\n");
    fclose(f1);
    fclose(f2);
}

int main()
{
	FILE *f1,*f2;
    int t;
    char f1name[50],f2name[50];
    printf("Vous voulez coder (1)/ ou décoder (2):\n");
    scanf("%d",&t);
    getchar();
    printf("Veillez donner le chemin du fichier source: ");
    gets(f1name);
    printf("Veillez donner le chemin du fichier cible: ");
    gets(f2name);
    f1=fopen(f1name,"r+");
    f2=fopen(f2name,"w+");
    
    if (t==1)
    {
        if (f1!=NULL && f2!=NULL)
        {
            coder(f1,f2);
        }
    }
    if(t==2)
    {
        if (f1!=NULL && f2!=NULL)
        {
            decoder(f1,f2);
        }
    }
	return 0;
}


Vous pouvez m'aider, s'il vous plaît? Merci
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

N'utilise pas gets(), c'est obsolète, utilise plutôt fgets(). Et attention à supprimer le '\n' final.

Sinon, merci d'écrire ici ta question. Et dis plutôt précisément ce qui te pose problème. Montre ce que tu as fait dans la question, et ce qui bloque.
1
sigmaaaa Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour fiddy,

1. Tu peux m'expliquer comment je peux utiliser "fgets()" dans mes codes, s'il te plaît?
J'ai cherché sur internet et j'ai changé "gets" dans mes codes comme ci-dessous mais ça marche pas:
    getchar(); 
    printf("Veillez donner le chemin du fichier source: "); 
    fgets(f1name,50,f1); 
    printf("Veillez donner le chemin du fichier cible: "); 
    fgets(f2name,50,f2); 
    f1=fopen(f1name,"r+"); 
    f2=fopen(f2name,"w+");


2. Ma question pour la partie "codage" est: comment je dois faire pour traduire une chaîne de caractère en code ASCII? Est-ce que ce que j'ai fait en-dessus est juste? Parce que quand je essaie de traduire ma chaîne de caractère, le résultat n'est pas correct et je n'arrive pas de trouver le problème dans ma fonction 'void coder(...)'
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
1. gets() permet de lire sur l'entrée stdin, il faut donc que tu introduises stdin dans fgets(). Ce qui donne : fgets(f1name, sizeof f1name, stdin)
Ensuite, faut enlever le '\n' avec :
char *p;
if ( (p = strchr (f1name, '\n')) != NULL ) *p='\0';


2. Ta méthode pour convertir un caractère en code ascii est correcte. En revanche, dans ta fonction coder() tu ne calcules pas le nombre de caractères successifs identiques. Dis autrement, ta séquence calcule n, mais pas c.
0