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

Résolu
Sethpolma Messages postés 66 Statut Membre -  
Char Snipeur Messages postés 10112 Statut Contributeur -
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 10112 Statut Contributeur 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 728 Statut Membre 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 Statut Membre 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 10112 Statut Contributeur 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