probleme avec fscanf et EOF

probleme avec fscanf et EOF - C - Programmation

Marsh Posté le 11-04-2006 à 19:32:16    

Bonsoir!
Voila je fais un petit prog en C qui doit lire dans un fichier.
Le fichier est composé d'un nombre entier d'un espace d'un autre entier d'un espace entier espace....
 
Je fais un fscanf pour récupérer mon entier et un autre pour vérifier qu'il y a bien l'espace jusqu'a ce que je trouve la fin du fichier mais ça ne fonctionne pas....
 
voila un bout de mon prog:
 

Code :
  1. do
  2. {
  3. fscanf(F,"%d",&nb_bit)
  4. printf("\n%d",nb_bit);
  5. fscanf(F,"%c",&temp)
  6. printf("\nchar%cchar",temp);
  7. if(temp==EOF)
  8.  printf("yataa" );
  9. else if(temp==' ')
  10.  {error=0;
  11.  break;}
  12. if(valeur_bit==1) //change valeur à écrire
  13.  valeur_bit=0;
  14. else valeur_bit=1;
  15. ecrit_fichier(indice, nb_bit,valeur_bit,G);
  16. if(error==1)
  17.  break;
  18. }
  19. while(1);


 
 
 
voila voila... tout ce que ça fait c'est de me retourner le derniere entier de mon fichier texte et un caractere "espace"... si vous pouvez m'aider ça serai super !!!
 
Merci

Reply

Marsh Posté le 11-04-2006 à 19:32:16   

Reply

Marsh Posté le 11-04-2006 à 19:53:00    

ojou a écrit :

Voila je fais un petit prog en C qui doit lire dans un fichier.
Le fichier est composé d'un nombre entier d'un espace d'un autre entier d'un espace entier espace....
 
Je fais un fscanf pour récupérer mon entier et un autre pour vérifier qu'il y a bien l'espace


C'est pas la peine. Les espaces sont les séparateurs 'naturels' de fscanf(). Tu boucles sur fscanf() en testant le code retour et c'est tout.

Code :
  1. int data;
  2. while (fscanf(fp, "%d", &data) == 1)
  3. {
  4.    printf ("%d\n", data);
  5. }


Message édité par Emmanuel Delahaye le 11-04-2006 à 19:53:25

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 11-04-2006 à 19:59:19    

Ok je vais essayer ça... merci de ta réponse!

Reply

Marsh Posté le 11-04-2006 à 20:53:32    

Merci ça marche mais maintenant j'ai un autre probleme... plus rien à voir avec le fscanf:
en fait les nombre que je lis dans mon fichier représentent le nombre de '0' puis de '1' puis de '0'... qui constituent des des caracteres.
J'ai fais une fonction qui convertis un tableau octet[8] en caractere (en fait c'est pas vraiment moi, c'est quelqu'un qui me l'a donné mais ça marche pas):
 

Code :
  1. for( compteur2=0 ; compteur2<=7 ; compteur2++ )
  2.    {
  3.    if(octet[compteur2]=='1')   // octet ne contient que des 0 ou des 1
  4.    c |= bit;         // on ajoute le bit courant
  5.    bit = bit<<1;       // on décale d'un cran
  6.    }
  7.    fputc(c,fichier);
  8.   }


 
Sur le principe ça devrait être juste... mais ça m sors tout le temps le même caractere: Ì      
 
Si vous pouviez encore me donner un petit coup de main...  MERCI

Reply

Marsh Posté le 11-04-2006 à 21:00:15    

for( i = 0; i < 8; i++ )
{
c += byte[i] == '1';
c <<= 1;
}

Reply

Marsh Posté le 11-04-2006 à 21:07:55    

.....heu tu pourrais juste m'expliquer stp parce que je suis vraiment à un niveau mediocre en C... (vous aviez déjà remarquez j'imagine)
 
c c'est le caractere, byte mon tableau mais on peut faire << à un caractere??? qu'est-ce que ça représente?

Reply

Marsh Posté le 11-04-2006 à 21:12:31    

un caractere est un type entier et << représente un décalage vers la gauche de la séquence de chiffres qui constitue la représentation binaire de ce nombre
 
si c == 0000 0001 en base 2
et que tu fais
c <<= 1; (equivalent à c = c << 1)
alors
c == 0000 0010 en base 2

Reply

Marsh Posté le 11-04-2006 à 21:52:35    

Je comprends pas pourquoi ça ne marche pas... j'ai vérifier que j'avais les bonnes valeurs dans mon tableau et pourtant le caractere affiché n'a rien à voir !!!
 

Code :
  1. for( i=7 ; i>=0 ; i--)
  2.  {
  3.  c += octet[i]==1;         // on ajoute le bit courant
  4.  c<<=1;       // on décale d'un cran
  5.  }
  6.  printf("\nchar %c\n",c);
  7.  fputc(c,fichier);
  8.  }


 
C'es bien ce que tu as fais! si tu vois une erreur dis le moi stp...
Sinon c'est sympa de m'avoir aidé!!! j'ai vraiment avancé grace à vous!
Merci

Reply

Marsh Posté le 11-04-2006 à 22:14:03    

ouai c'etait faux, il y avit un decalage en trop
 
for( i = 0; i < 8; i++ )
{
c <<= 1;
c += byte[i] == '1';
}

Reply

Marsh Posté le 11-04-2006 à 22:58:05    

Bon je cherchais une erreur qui n'existait pas... en fait je convertissais l'hexa comme du décimal (honte à moi) et forcément j'avais pas le bon caractere....
 
Enfin bon c'est OK maintenant alors un grand merci à vous deux !!!!

Reply

Marsh Posté le 11-04-2006 à 22:58:05   

Reply

Marsh Posté le 12-04-2006 à 16:57:16    

Me revoila avec un autre probleme... en fait je recupere un fichier composé d'entiers qui compose un fichier image (jpeg par exemple). J'ai essayer d'utiliser mon programme pour décoder mon fichier mais le résultat n'est pas exploitable...
 
J'écris toujours de la meme façon (en %c).
 
Est-ce qu'il y a un moyen de rendre mon prog compatible avec n'importe quel type de fichier?
 
Je n'ai pas trouver utile de refaire un nouveau topic pour ma question...
 
MERCI d'avance !

Reply

Marsh Posté le 12-04-2006 à 19:23:38    

montre un peu le contenu du fichier

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed