1

J'ai besoin de créer un fichier, mais dès que je mets fprintf dans une boucle, le programme plante.
En mettant fflush(NAME_FILE); qui force l'ecriture du flux avant l'instruction suivante, j'ai vus que la boucle s'execute 255 fois avant de planter. Comment faut-il faire?
#include <iostream.h>
#include <stdio.h>
#define NAME_FILE fopen("output.txt", "a")

int main()
{
//fprintf(fopen("output.txt", "a"), "");//vide le fichier de sortie
//fclose(NAME_FILE);

for (int i=0;i<1000;i++)
{
fprintf(NAME_FILE, "hello\n");
fflush(NAME_FILE);
// fclose(NAME_FILE);
}
cout << "\ntest reussi\n"; }

2

Cette instrcution doit possèder un buffer et tu doit dépasser ça taille ce qui provoque un plantage, essaye une autre instruction...

(Je ne programme pas sur PC C et C++ donc ce que je dis est peut être faut).
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

3

Oui, c'est ce que je pense aussi. J'ai essayé avec fput et ca fait pareil.

4

fflush peut être la cause du plantage??
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

5

En fait sans le fflush le prog plante sans ecrire dans le fichier, avec il ecrit 255 fois et plante.
Et pour des boucles de moins de 255 le fflush et fclose n'etaient pas necessaires.
(Avant de quitter, un programme envoi un fclose, et un fclose force un fflush avant de fermer le fichier)

6

ca plante pcq tu recharges un handle de fichier à chaque écriture.

#include <iostream.h> 
#include <stdio.h> 
#define NAME_FILE fopen("output.txt", "a") 

int main() 
{ 
FILE *f;
f=fopen("output.txt", "r");
fprintf(f, "");//vide le fichier de sortie 
fclose(f); 

f=fopen("output.txt", "a");
for (int i=0;i<1000;i++) 
{ 

fprintf(f, "hello\n"); 
//fflush(f); 
} 
fclose(f); 
cout << "\ntest reussi\n"; 
}


si tu développes ta macro, tu as un fopen chaque fois que tu fais un accès fichier. Tu ouvres donc le fichier chaque fois, sans le fermer. Ca plante pcq ca bouffe trop de mémoire, et/ou pcq tu peux pas ouvrir plusieurs fois le même fichier.

Il faut ouvrir le fichier, stocker son handle (FILE *f) et utiliser la variable à chaque fois.
à la fin, tu fermes ton handle

l'instruction fclose(NAME_FILE); se dvp en:

fclose(fopen("file.ext","a"));
cela ne sert carrément à rien. si c'était optimisé, ca ferait un NOP vu que tu fermes ce que tu viens d'ouvrir.


Et entre nous, t'as pas besoin du c++ pour faire ca, vu que tu utilises fprintf:
ton cout << "texte" pourrait être remplacé par printf("\ntest réussi\n"); ou par fprintf(stdout,"\ntest réussi\n");

255 fois? pcq fopen peut ouvrir 255 fichiers avant de planter!

7

Ca marche ! merci

8