Codage et décodage d'un fichier en C

Fermé
sigmaaaa Messages postés 7 Date d'inscription jeudi 13 décembre 2012 Statut Membre Dernière intervention 3 janvier 2013 - 2 janv. 2013 à 22:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 3 janv. 2013 à 11:59
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
2 janv. 2013 à 23:46
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 jeudi 13 décembre 2012 Statut Membre Dernière intervention 3 janvier 2013
Modifié par sigmaaaa le 3/01/2013 à 01:51
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
3 janv. 2013 à 11:59
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