Partage
  • Partager sur Facebook
  • Partager sur Twitter

mario sokoban

Une jolie prise de tête...

Sujet résolu
    4 novembre 2006 à 8:59:27

    Bonjour,
    J'appelle ma fonction ainsi:
    jouer(ecran);

    la variable ecran étant défini dans le main sous SDL_Surface *ecran;
    Voici son prototype:
    void jouer(SDL_Surface *ecran);


    Et la voici en entière:
    void jouer(ecran)
    {
    SDL_Event event;
    int continuer=1;
    FILE *fichier=NULL;
    long i=0,x=0;
    int niveau[NOMBRE_BLOCS][NOMBRE_BLOCS]={0};
    fichier = fopen("niveaux.txt", "r");
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112));
    while(niveau[i][x]!='\n')
    {
    niveau[i][x]=fgetc(fichier);
    x++;
    if(x==12)
    {
    i++;
    x=0;       
    }     
    }
    i=0;
    x=0;
    while(i!=12)
    {
    fprintf(stderr,"%ld ",niveau[i][x]);
    x++;
    if(x==12)
    {
    i++;
    x=0;
    }
    }
    }


    Et sa ne marche pas:
    "argument "ecran" doesn't match prototype "
    "prototype declaration "
    "invalid type argument of `->' "
    "[Warning] passing arg 1 of `SDL_FillRect' makes pointer from integer without a cast"

    Merci pour votre aide (d'avance)
    • Partager sur Facebook
    • Partager sur Twitter
      4 novembre 2006 à 9:30:04

      Salut,

      Comment est déclaré ecran ? Au vu de l'erreur ecran n'est pas déclaré comme il faut. La déclaration correcte :
      SDL_Surface *ecran


      Sinon, indente ton code ça sera plus lisible ;)
      • Partager sur Facebook
      • Partager sur Twitter
        4 novembre 2006 à 19:28:57

        Je l'ai initialisée comme ca dans le main et mis comme ca dans le prototype en fait...
        Je voit vraiment pas l'erreur -_-'
        • Partager sur Facebook
        • Partager sur Twitter
          4 novembre 2006 à 20:24:12

          lorsque tu déclare le prototype de ta fonction, tu dois mettre le type des paramètres, mais tu dois aussi le mettre lorsque tu définis ta fonction.

          //bonne version :
          void jouer(SDL_Surface* ecran)
          {
          // ...

          //mauvaise version (la tienne)
          void jouer(ecran)
          {
          //...
          • Partager sur Facebook
          • Partager sur Twitter
            5 novembre 2006 à 10:40:36

            Sa marche c'est magnifique ^^
            Je croyai qu'il fallait mettre "long i" ou encore "int continuer" que dans le prototype de la fonction, j'y croyai tellement que je n'ai pas re-regarder dans le chapitre "fonction" du cours... Ca m'apprendra tiens...
            Merci nico :)
            Par contre y a un autre problême, sa devient une habitude, dans ma fonction dés que je fait appel a la ligne de code:
            caractere=fgetc(fichier);

            Eh bien sa se ferme, comme ca, quel que soit sa place dans la fonction...
            J'ai initialisés les variables dans la fonction ainsi:
            int caractere=0;
            FILE *fichier=NULL;

            Et charger mon fichier ainsi:
            fichier = fopen("niveaux.txt", "r");

            J'ai reregardé les chapitres correspondant moults fois et je n'ai rien trouvé...
            La seule chose sur c'est que c'est un problême de lecture ou avec le fichier, quelle que soit la lecture (fgetc ou fgets) sa ferme sans planter.
            • Partager sur Facebook
            • Partager sur Twitter
              5 novembre 2006 à 11:09:19

              tu as pensé à vérifier que ton fichier était bien ouvert ?

              if(fichier == NULL)
                  printf("ERREUR !!!");

              Cela peut être une cause d'erreur. (non-existence du fichier, faute de frappe quelque part, ...)
              • Partager sur Facebook
              • Partager sur Twitter
                5 novembre 2006 à 12:14:14

                En effet, c'était une erreur de fichier, j'avais mis "niveaux.txt" au lieu de "niveau.txt", maintenant sa marche au poil ;)
                Merci c'est vraiment sympa :)
                • Partager sur Facebook
                • Partager sur Twitter

                mario sokoban

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown