Rechercher : dans
Par :

Langage C : lecture, écriture dans un fichier

Dernière réponse le 30 avr 2008 à 08:28:52 vali6, le 28 avr 2008 à 13:12:16 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « langage C : lecture, écriture dans un fichier » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Lire un fichier en .rbs VoirOn peut rencontrer parfois des fichiers en .rbs, issus d'un enregistrement ou un autre. La solution la plus simple pour lire ces fichiers est tout bêtement de remplacer l'extension .rbs par .mp3 Si vous ne voyez pas l'extension du fichier, faites...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Caractéristiques du langage C VoirLe fichier source Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c. Note d'un visiteur (J.Grondin) : L'extension est en minuscules. Le .C (majuscule) est interprété par...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

kilian, le 28 avr 2008 à 13:41:34
  • +1

Tu enregistres avec fprintf, pourquoi ne pas lire avec fscanf ?

Répondre à kilian

2

vali6, le 28 avr 2008 à 15:23:42

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

Répondre à vali6

3

Char Snipeur, le 28 avr 2008 à 16:36:55

Et fscanf(f,"%d\r\n",t[i]) ? Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur

Répondre à Char Snipeur

4

vali6, le 28 avr 2008 à 17:58:42

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

Répondre à vali6

5

Char Snipeur, le 29 avr 2008 à 08:41:45

ç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)) Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur

Répondre à Char Snipeur

6

vali6, le 29 avr 2008 à 16:58:36

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

Répondre à vali6

7

 Char Snipeur, le 30 avr 2008 à 08:28:52

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. Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur

Répondre à Char Snipeur
Collection CommentÇaMarche.net