Probleme ecriture dans un fichier texte

Jackyzgood Messages postés 26 Date d'inscription mercredi 17 septembre 2008 Statut Membre Dernière intervention 6 mars 2010 - 24 mai 2009 à 12:51
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 25 mai 2009 à 18:20
Bonjour à tous !

J'essaye de faire une petit programme qui me permettrais de découper facilement des sprites, pour cela, je crée dans un premier temps un découpage par défaut que je modifie en fonction de l'image qui apparait à l'écran puis je sauvegarde les coordonnées dans un fichier texte a la fermeture du programme.

Je vais vous donner un exemple :

le découpage par défaut est le suivant :
coordonnées X,Y puis hauteur, largeur
0 0 100 100       la coordonnée Y est a 0 (normale c'est la première ligne)
100 0 100 100
200 0 100 100
300 0 100 100
400 0 100 100
500 0 100 100
600 0 100 100
700 0 100 100
800 0 100 100
900 0 100 100  (fin de la première ligne)
0 100 100 100  (début de la 2eme)
100 100 100 100

Jusque la pas de soucis mon programme affiche correctement les images et les découpages. Cependant a la fermeture du programme je retrouve ceci dans mon fichier :

0 0 100 100
0 0 100 100
0 0 100 100
0 0 100 100
0 0 100 100
0 0 100 100
0 0 100 100
0 0 100 100
0 0 100 100
0 0 100 100
0 100 100 100

J'ai fais différents découpage pour voir si c'est un problème sur X ou Y ou les 2, et il s'avère que seul la coordonnées X n'est pas enregistré.

Voici les morceau de code de mon programme :

SDL_Rect clip[10][10];int i 0, j 0;

        for (j = 0 ; j <= 9 ; j++)
        {
            for (i = 0 ; i <= 9 ; i++)
            {
                fscanf(testLecture, "%ld %ld %ld %ld", &clip[ i ][ j ].x, &clip[ i ][ j ].y, &clip[ i ][ j ].w, &clip[ i ][ j ].h);
                fprintf(fichier, "%ld %ld %ld %ld\n", clip[ i ][ j ].x, clip[ i ][ j ].y, clip[ i ][ j ].w, clip[ i ][ j ].h);
              
                //ici je test la lecture, et la copie faite dans fichier est parfaitement identique donc à priori ce n'est pas la lecture qui bloque....
            }
        }

        for (j = 0 ; j <= 9 ; j++)
        {
            for (i = 0 ; i <= 9 ; i++)
            {
                fprintf(testEcriture, "%ld %ld %ld %ld\n", clip[ i ][ j ].x, clip[ i ][ j ].y, clip[ i ][ j ].w, clip[ i ][ j ].h);
           
                // c'est ici que ça coince car malgré que ça soit exactement les même boucle le fichier testEcriture est différent de testLecture...
             }
        }

Si vous avez une idée de la boulette que j'ai pu faire.

Merci d'avance.

4 réponses

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
24 mai 2009 à 13:49
Salut,
Il ne manquerait pas un \n à la fin u fscanf ? (quoi que non, tu n'as pas eu de soucis pour récrire dans 'fichier')
Sinon, tu fais uoi de tes variables entre temps ? Si tu appelles tes 2 boucles l'une juste après l'autre, tu as quoi ?
(Au passage, %d suffit).

Cordialement, uaip.
0
Jackyzgood Messages postés 26 Date d'inscription mercredi 17 septembre 2008 Statut Membre Dernière intervention 6 mars 2010
24 mai 2009 à 14:04
Dans le programme initial entre les 2 boucles je modifie les coordonnées, donc les clip[ i ][ j ].x, clip[ i ][ j ].y, clip[ i ][ j ].w, clip[ i ][ j ].h avec  :

                  case SDL_KEYDOWN :
                  switch(event.key.keysym.sym)
                  {
                         case SDLK_RIGHT :
                              clip[ (*positionMarqueur).x ][ (*positionMarqueur).y ].x ++;
                              SDL_Delay(50);
                              break;

C'est pas le code complet mais ce n'est pas ça qui pose problème, car j'ai recommencé mon programme depuis le début pour voir ou était l'erreur et j'ai commencé par le bout de code de mon premier message, et déjà la ça bloque. Donc pour l'instant c'est juste un test de lecture et d'écriture dans un fichier, mais le plus perturbant c'est qu'a partir de la 2eme ligne tout se passe bien. Je suppose donc que ça doit être mes boucles qui doivent être mal écrite mais je ne vois pas du tout ou....

Pour le fscanf je n'ai pas mis de \n parce que de toute façon une fois arrivé a la fin de la ligne il part sur le début de la suivante.
0
Jackyzgood Messages postés 26 Date d'inscription mercredi 17 septembre 2008 Statut Membre Dernière intervention 6 mars 2010
24 mai 2009 à 20:13
j'ai fais un autre test j'ai essayé en mettant simplement un tableau a la place de clip[][].x :
    int i 0, j 0, tableau[10][10];

        for (j = 0 ; j <= 9 ; j++)
        {
            for (i = 0 ; i <= 9 ; i++)
            {
                fscanf(testLecture, "%ld %ld %ld %ld", &tableau[ i ][ j ], &clip[ i ][ j ].y, &clip[ i ][ j ].w, &clip[ i ][ j ].h);
                fprintf(fichier, "%ld %ld %ld %ld\n", clip[ i ][ j ].x, clip[ i ][ j ].y, clip[ i ][ j ].w, clip[ i ][ j ].h);
            }
        }

        for (j = 0 ; j <= 9 ; j++)
        {
            for (i = 0 ; i <= 9 ; i++)
            {
                fprintf(testEcriture, "%ld %ld %ld %ld\n", tableau[ i ][ j ], clip[ i ][ j ].y, clip[ i ][ j ].w, clip[ i ][ j ].h);
            }
        }

et dans ce cas la ça marche ! j'ai donc un problème avec clip, je l'ai déclaré de la manière suivante :

    SDL_Rect clip[10][10];

aurais-je mal utilisé cette structure ?
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
25 mai 2009 à 18:20
Dans mon 1er post, je voulais te demander si SDL_Rect initialisait bien ton tableau, mais finalement, c'était sans pas pas important, vu que tu remplis chaque case.
Ta variable "tableau" est de type entier, sans doute qu'il caste automatiquement dans le scanf. Je ne connais pas le type de SDL_Rect.
Mes recherches vont être stoppées par mon mal de crâne, désolé.

Cordialement, uaip.
0
Rejoignez-nous