Souci avec stdio.h

Souci avec stdio.h - C++ - Programmation

Marsh Posté le 25-11-2005 à 18:34:59    

Quelqu'un a une idée pourquoi les fonctions putw() et putc() m'écrivent la valeure -1 alors quand j'entre 26???
Voilà la 2ème fois que je me percute à ce problème et me faut chaque fois 3h pour trouver la raison! Ca me dégoute un peu là...
C'est un bug?

Reply

Marsh Posté le 25-11-2005 à 18:34:59   

Reply

Marsh Posté le 25-11-2005 à 20:08:48    

avec un bout de code se serait plus facile à comprendre ton problème. J'ai du mal à mettre en cause les functions putw() ou putc() :-)
 
Stef

Reply

Marsh Posté le 26-11-2005 à 11:15:50    

Le problème est tout bête. Tu lances ce programme, chez moi ça affiche -1 ...!
 

Code :
  1. #include <stdio.h>
  2. void main()
  3. {
  4. FILE *pFile;
  5. pFile = fopen("teste.dat", "w+" );
  6. if (pFile)
  7.  putw(26, pFile);
  8. rewind(pFile);
  9. printf("%d", getw(pFile));
  10. getchar();
  11. fclose(pFile);
  12. }

Reply

Marsh Posté le 26-11-2005 à 11:29:40    

A mon avis c'est un bug, (uniquement chez moi peut-être), car en fait lorsque la valeure 26 est écrite, tout le reste des valeures écrites dans le fichiers sont égale à -1, ce qui cause un résultat désastrueux dans un programme plus complexe.
 
Mon environnement: WinXP, Visual C++

Reply

Marsh Posté le 26-11-2005 à 12:18:36    

:hello:  
C'est le problème classique de l'ouverture d'un fichier en mode texte au lieu d'une ouverture en mode binaire.
 
Comme 26 est un code non imprimable (puisqu'il est inférieur à 32 qui est la valeur de l'espce qui est le premier caractère de type texte), il faut faire une ouverture en mode binaire. De plus fputw marche avec les ficheir ouvert en mode binaire, pas en mode texte.
 
Donc il faut rajouter un petit "b" :

pFile = fopen("teste.dat", "wb+" );

Reply

Marsh Posté le 26-11-2005 à 12:37:15    

  En plus 26 c'est 0x1A en hexadécimal, Caractère de fin de fichier en mode texte.

Reply

Marsh Posté le 26-11-2005 à 17:44:28    

C'est donc ca! Merci :)

Reply

Marsh Posté le 26-11-2005 à 21:33:31    

et c'est du C ce code, pas du C++
Et, pour la 1000e fois sur ce forum, void main ca N'EXISTE PAS !!
 
il n'y a que int main()
si tu ne veux pas retourner de valeur, c'est optionnel dans le main, mais void c'est interdit.
 
Malheureusement Visual C++, le + répendu chez les débutants, et de nombreux bouquin citent et acceptent ce "void main" :(

Reply

Sujets relatifs:

Leave a Replay

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