Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
555 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Lecture de caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lecture de caractères

n°1033563
Emmylou
Posté le 03-04-2005 à 14:26:39  profilanswer
 


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.
 

mood
Publicité
Posté le 03-04-2005 à 14:26:39  profilanswer
 

n°1033567
Taz
bisounours-codeur
Posté le 03-04-2005 à 14:32:32  profilanswer
 

Emmylou a écrit :


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...

mais tu veux faire quoi exactement ?

Emmylou a écrit :


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.


 


int c;
 
while( ((c = getchar()) != EOF) && !isspace(c) )
{
  /* rien */
}


 
peut par exemple t'aider à manger tous les espaces


Message édité par Taz le 03-04-2005 à 14:33:02
n°1033570
dark86
Posté le 03-04-2005 à 14:47:04  profilanswer
 

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 :
  1. int a;
  2. FILE* fichier = fopen(nom, "r" );
  3. for(i=0;i<5;i++)
  4. {
  5. fscanf(fichier,"%d", &a);
  6. printf("%d\n",a);
  7. }
  8. fclose(fichier);


n°1033579
Emmylou
Posté le 03-04-2005 à 15:10:01  profilanswer
 

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  *****]
 

n°1033586
Taz
bisounours-codeur
Posté le 03-04-2005 à 15:31:55  profilanswer
 

donne un exemple d'enregistrement

n°1033588
Emmylou
Posté le 03-04-2005 à 15:38:11  profilanswer
 

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
:)

n°1033617
Taz
bisounours-codeur
Posté le 03-04-2005 à 16:31:52  profilanswer
 

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);
}
 

n°1033623
Emmylou
Posté le 03-04-2005 à 16:39:07  profilanswer
 

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)

n°1033639
Taz
bisounours-codeur
Posté le 03-04-2005 à 16:50:46  profilanswer
 

t'as essayé avec ce que je t'ai dit ? non. parce que c'est vraiment pas compliqué
 

Spoiler :

#include <stdio.h>
 
int main()
{
 unsigned n, c;
 
 while(fscanf(stdin, "%u %u", &n, &c) == 2)
 {
  while(n--)
   putchar((char)c);
 }
 
 return 0;
}

n°1033646
Emmylou
Posté le 03-04-2005 à 16:58:36  profilanswer
 


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]

mood
Publicité
Posté le 03-04-2005 à 16:58:36  profilanswer
 

n°1033654
ToxicAveng​er
Posté le 03-04-2005 à 17:07:47  profilanswer
 

bah avant de décoder faut ptet lire (correctement) ton fichier non ? Enfin, moi je dis ca, je dis rien hein...

n°1033657
Taz
bisounours-codeur
Posté le 03-04-2005 à 17:09:22  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Lecture de caractères

 

Sujets relatifs
Problème requête : Chaines de caractèresJ'ai un PB de lecture seule
[MFC] Violation d'accès en lecture ? pourquoi ?Lecture d'un fichier texte contenu dans un JAR
Lecture d'un texte dans un DXFcaractères illégaux ?
Projet : simplification d'une lecturefichier en lecture/ecriture
PHP : vérifier si des caractères sont alphanumériques[C] problème de lecture de caractères dans un fichier
Plus de sujets relatifs à : Lecture de caractères


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR