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

Résolu
Sethpolma Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   127
 
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   Statut Membre Dernière intervention   15
 
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   Statut Contributeur Dernière intervention   1 299
 
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