Langage C : lecture, écriture dans un fichier [Fermé]

vali6 - 28 avril 2008 à 13:12 - Dernière réponse :  yumburgk
- 8 mai 2010 à 07:31
Salut à tous,

je suis novice en C, je solicite donc votre aide...
Je suis en train de programmer un démineur en C sous Windows avec Dev C++, et je souhaiterais écrire les meilleurs temps dans un fichier texte.
J'ai utilisé la fonction fgetc pour lire dans le fichier texte, le probleme c'est qu'elle ne récupère qu'un seul caractère. Or j'aimerai pouvoir lire et écrire des temps supérieur à 9 secondes :-)
Voici la fonction que j'ai déjà écrite :


void meilleur_temps(int temps,int rep) // temps = temps d'execution du programme ; rep = niveau de difficulté
{
//t[0] : temps niveau facile
//t[1] : temps niveau moyen
//t[2] : temps niveau dificile

int i=0;
char car,t[3];
FILE *f;

f=fopen("meilleur_temps.txt","r+b");
if(f==NULL)
{
perror("erreur ouverture");
return;
}

// recuperation des meilleurs temps dans le fichier texte
while ((car = fgetc(f)) != EOF)
{
if (car != '\n')
{
t[i]=car;
i++;
}
else i--;
}

//mise a jour du fichier texte contenant les records
if(temps<t[rep])
{
t[rep]=temps; // nouveau temps pour le niveau choisi
rewind(f); // on se place au debut du fichier

for(i=0;i<3;i++)
{
if(i==rep) fprintf(f,"%d",t[i]);
else fprintf(f,"%c",t[i]);

fprintf(f,"\r\n");
}
}
fclose(f);
}

merci de me répondre.
Afficher la suite 

8 réponses

kilian 8897 Messages postés vendredi 19 septembre 2003Date d'inscriptionModérateurStatut 20 août 2016 Dernière intervention - 28 avril 2008 à 13:41
+1
Utile
1
Tu enregistres avec fprintf, pourquoi ne pas lire avec fscanf ?
Cette réponse vous a-t-elle aidé ?  
en fait dans mon fichier "meilleur_temps.txt" il y a un nombre par ligne, donc si j'ecris fscanf(f,"%d",t[i]) le saut de ligne fait merder la lecture...
Char Snipeur 9669 Messages postés vendredi 23 avril 2004Date d'inscriptionContributeurStatut 6 décembre 2017 Dernière intervention - 29 avril 2008 à 08:41
+1
Utile
1
ça viens peut être de feof() (voir là : http://www.bash-linux.com/unix-man-feof-francais.html )
d'ailleur, dans le while, j'aurai mi : while(!feof(f))
Cette réponse vous a-t-elle aidé ?  
j'ai essayé while(!feof(f)) mais ca buguait..
je pense pas que le problème vienne de ce feof.
En effet avant l'execution j'ai 3 temps dans mon fichier, et après j'en ai toujours 3. le problème, c'est que l'entier que je modifie est corretc mais les 2 autres sont des caractères illisibles...
:-(
Char Snipeur 9669 Messages postés vendredi 23 avril 2004Date d'inscriptionContributeurStatut 6 décembre 2017 Dernière intervention - 28 avril 2008 à 16:36
0
Utile
1
et fscanf(f,"%d\r\n",t[i]) ?
pas mieu... a moins que j'écrive pas ce qu'il faut.
j'ai mis ça a la place de la boucle avec le fgetc.
while(feof(f))
{
fscanf(f,"%d\r\n",t[i]);
i++;
}
Char Snipeur 9669 Messages postés vendredi 23 avril 2004Date d'inscriptionContributeurStatut 6 décembre 2017 Dernière intervention - 30 avril 2008 à 08:28
0
Utile
faut ire, je ne comprend pas pourquoi u utilise %c au lieu de %d dans le deuxième printf. ça viens eut être de là.
as tu lu la doc de feof ?
La fonction feof() teste l'indicateur de fin de fichier concernant le
flux pointe par stream, et renvoie une valeur non nulle si cet indica-
teur est actif. L'indicateur de fin de fichier ne peut etre reini-
tialise que par la fonction clearerr().
C'est à dire que si tu arrive à la fin du fichier et que tu fait un rewind, feof renverra toujours 1 (du moins c'est comme ça que je le comprend.
0
Utile
bonjour j'ai un probleme sur l'enregistrement des etudiants.
j'aimerai enregistré ,listé afficher,et sauvegardé mes enregistrements dans un fichier et je ne m'en sor pas.svp aidez moi avec les codes sources en langage c