[C++] Problème de position dans un fichier

Résolu/Fermé
Sethpolma Messages postés 66 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 8 mars 2007 - 8 déc. 2005 à 07:00
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 16 déc. 2005 à 21:48
Bonjour à tous !

J'ai un petit problème concernant la lecture de fichiers textes. Je m'explique : j'ai des niveaux contenus dans un fichier texte, définis comme ceci :

Level N
'Titre du niveau

Niveau


La boucle de lecture fonctionne bien. Cependant, j'ai un petit problème pour changer de niveau. Voici ma fonction : ce sera plus parlant...

void ReadLevel(int nb)
{
        FILE *file = NULL;

	file = fopen("levels.txt", "r");
	if(!file)
	{
		printf("Impossible d'ouvrir le fichier des niveaux.");
		exit(1);
	}
	
	fscanf(file, "Level nb");                  

	char car = fgetc(file);
	if( car == 'L' || car == '\x0091' )			// x0091  =  '
	{
		fscanf(file, "\n");
	}

	extern char lvl[31][31];

	for( char i=0 ; i<31 ; i++ )
	{
		for( char j=0 ; j<31 ; j++ )
		{
			switch( car = fgetc(file) )
		       {   
                                      // Lecture du niveau 
                        }
		}
	}

	fclose(file);
}


Le problème doit venir du fscanf... Est-ce que cette fonction change la position courante dans le fichier ?

Merci !
A voir également:

4 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
8 déc. 2005 à 11:26
il me semble que oui.
Pour t'en assurer fscanf(file,"%c",&car);printf("%c",car); plusieur foi d'afiler pour voir si la fonction avance bien le pointeur
0
scoubidou944 Messages postés 719 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 127
10 déc. 2005 à 00:27
houalaa c'est super lent ton code...
fscanf ca rame comme fonction.

Si tu sais avec quoi tu travailles, fais un fread(), bcp plus rapide.


0
Sethpolma Messages postés 66 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 8 mars 2007 15
15 déc. 2005 à 21:26
Un petit message pour indiquer la solution que j'ai trouvé (des fois que ça aide quelqu'un...) :

	while( fgetc(file) != feof(file))
	{
		fscanf(file, "evel %d\n", &num);
		if( num == nblevel ) break;
	}


Ca marche comme ça. En clair, tant qu'on est pas à la fin du fichier, on cherche la bonne position correspondant au niveau souhaité. Une fois que l'on y est, on quitte la boucle, et on peut passer au traitement du niveau.

C'est lent ? Je vais me pencher sur la doc concernant fread alors. Mais bon, c'est un jeu genre Sokoban. Donc, c'est pas encore dramatique... :D
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
16 déc. 2005 à 21:48
je pense en effet qu'il vaut mieu rester avec scanf beaucoup plus facile à utilisé.
En plus si tu perd 1s lors du chargement de niveau, ça risque pas de trop géner.
Mais à ta place, vu que tu fait du C++, j'aurai utilisé les flux d'E/S sur les fichiers et la STL, avec en particulier <string> ce qui facilite les choses.
Ce que tu fait resemble plus à du C
0