Lecture de caractères - C - Programmation
Marsh Posté le 03-04-2005 à 14:32:32
Emmylou a écrit : |
mais tu veux faire quoi exactement ?
Emmylou a écrit : |
|
peut par exemple t'aider à manger tous les espaces
Marsh Posté le 03-04-2005 à 14:47:04
c'etait exactement mon 1er exo sur les fichiers^^
mais je ne vois pas du tout le probleme avec les fscanf :
ca marchait tres bien :
Code :
|
Marsh Posté le 03-04-2005 à 15:10:01
Re-Bonjour,
le problème vient probablement de ma boucle.
Ce que je dois faire ?
J'ai un texte codé (rangé dans un fichier).
Le texte est découpé en suite de segements de telle façon que chaque segment soit composé d'une ou plusieurs occurences du même caractère.
Chaque segment est codé par deux entiers n et c donnat respectivement le nombre d'occurences du caractères et le code ASCII de ce caractère.
[Et moi j'ai rien que des T, tout plein de T alors que je voudrais avoir
***** Bonnes vacances *****]
Marsh Posté le 03-04-2005 à 15:38:11
Un exemple de ce que j'ai fait ?
#include <stdio.h>
void decoder(FILE*f)
{
int n, j, c;
fscanf (f, "%d", &n);
while (c!=EOF)
{
c=getc(f);
if (c=' ')
{
c=getc(f);
for(j=0; j<n; j++)
{
printf ("%c", &c);
}
}
else
{
for(j=0; j<n; j++)
{
printf ("%c", &c);
}
}
c=getc(f);
fscanf (f, "%d", &n);
}
return;
}
int main (void)
{
FILE*f;
f=fopen ("code.txt", "r" );
if (f==NULL)
{
printf ("Erreur" );
}
decoder(f);
fclose(f);
return 0;
}
J'suis passée par plusieurs choses, mais ça m'affiche toujours plusieurs lignes de T.
Voire même des T qui s'arrêtent jamais de s'afficher.
Ou alors des 0 si je déclare c en variable char.
Et le machin que je voudrais décoder est comme ça :
5 42 2 32 1 66 1 111 2 110 1 101 1 115 1 32 1 118 1 97 1 110 1 99 1 101 1 115 2 32 5 42 1 10
'Ala
Marsh Posté le 03-04-2005 à 16:31:52
c;
fscanf (f, "%d", &n);
while (c!=EOF)
c n'est pas initialisé.
il te faut tester la valeur de c après chaque getc
mais je comprends toujours pas ton problème, tu n'as pas besoin de getc, juste un une boucle simple avec fscanf (oublie pas de tester sa valeur de retour) et voilà. Comme dans ton premier exemple
while(fscanf(f, "%u %u", &n, &c) == 2)
{
printf("%u occurences du caractères %c\n", n, (char)c);
}
Marsh Posté le 03-04-2005 à 16:39:07
Non, non ce que je veux faire, c'est décoder mon texte.
(Huhu, j'ai changé et fait ça, maintenant j'ai des lignes de 1, 2, 5 et espace...)
void decoder(FILE*f)
{
int n, c, j;
fscanf (f, "%d", &n);
c=getc(f);
while (c!=EOF)
{
j=0;
fscanf (f, "%d", &n);
c=getc(f);
if (c==' ')
c=getc(f);
while (j!=n)
{
printf ("%c", c);
j++;
}
c=getc(f);
}
return;
}
(jsuis vraiment nulle)
Marsh Posté le 03-04-2005 à 16:50:46
t'as essayé avec ce que je t'ai dit ? non. parce que c'est vraiment pas compliqué
Spoiler : #include <stdio.h> |
Marsh Posté le 03-04-2005 à 16:58:36
Non j'ai pas essayé, d'abord parce que je ne vois pas le rapport avec ce que je dois faire : j'ai un fichier codé et que je dois décoder, en affichant ensuite le résultat du décodage.
Et ensuite parce que je tiens à comprendre tout ce que je fais, pas à 'bêtement' faire comme d'autres font surtout s'ils utilisent des trucs que je connais pas.
[D'autant que je suis notée]
Marsh Posté le 03-04-2005 à 17:07:47
bah avant de décoder faut ptet lire (correctement) ton fichier non ? Enfin, moi je dis ca, je dis rien hein...
Marsh Posté le 03-04-2005 à 17:09:22
ET BEN !
tu dis que tu dois lire des couples d'entiers ?
while(fscanf(f, "%u %u", &n, &c) == 2)
y a pas de grand secret ...
t'es entrain 'bêtement' de faire n'importe quoi, genre 'je rajoute des trucs jusqu'à ce que ça marche'
Algorithmiquement, c'est simple : lire un couple et le décoder. Ce sont 2 opérations indépendantes. Quand on voit ta sauce, on en doute. C'est pas clair dans ta tête.
Y a pas de mystère. Et d'ailleurs, je ne vois pas ce que tu ne connais pas dans ma solution
Marsh Posté le 03-04-2005 à 14:26:39
Bonjour,
en petite minuscule (et mauvaise) débutante que je suis, j'aimerais savoir s'il existe un équivalent pour les entiers de getc(f) ?
Plutôt qu'utiliser fscanf(f, "%d", &n) (n est le nom de mon entier) qui, apparemment ne fait pas vraiment ce que je voudrais faire...
Et aussi :
Je dois décoder un fichier de ce type
1 55 2 66 8
Quand je fais un getc, est ce que les espaces sont pris en compte ? Ds ce cas, il faut que j'en fasse deux pour arriver au caractère suivant ?
Merci.