IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème fonction et pointeurs


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut Problème fonction et pointeurs
    J'ai un bout de code que j'aimerai mettre sous forme de fonction, mais je m'emmêle dans les pointeurs.

    Voici le code que j'ai pour l'instant dans mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
                if(coord[2]=='1')
                {
                    tab[l0][0]=jeton;
                    for(i=0; i<(l0-coordlettre)*2; i=i+2)
                    {
                        gotoxy(13,14+i+coordlettre*2);
                        printf("%c", jeton);
                        Sleep(200);
                        gotoxy(13,14+i+coordlettre*2);
                        printf(" ");
                    }
     
                    l0--;
                }
    Ce code est répété 6 fois en tout.
    Ce qui change c'est l0, qui passe en l1, l2... jusqu'en l5.

    Voici ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void afftab(int *l)
    {
                if(coord[2]=='1')
                {
                    tab[*l][0]=jeton;
                    for(i=0; i<(*l-coordlettre)*2; i=i+2)
                    {
                        gotoxy(13,14+i+coordlettre*2);
                        printf("%c", jeton);
                        Sleep(200);
                        gotoxy(13,14+i+coordlettre*2);
                        printf(" ");
                    }
     
                    *l--;
                }
    }
    Problème, il me dit que mon tableau ainsi que les autres variable ne sont pas définies. Normal, je ne l'ai fait que dans le main. Mais je ne peux pas les déclarer dans la fonction car j'écraserai les anciennes valeurs de mes variables et ce n'est vraiment pas souhaitable.

    Ma question est donc : Que faire ? ^^

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Jei,

    Tu passes toutes les variables nécessaires à ta fonction en paramètres de cette fonction.

    Franchement, je ne vois pas ce qui t'arrête là-dedans.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut


    Je n'ai plus d'erreur de compil, mais maintenant quand je test le prog, j'ai une belle erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void afftab(int *l, char *jeton, int *coordlettre, char **coord[2], char ***tab[6][6], int *i)
    {
                if(**coord[2]=='1')
                {
                    ***tab[*l][0]=*jeton;
                    for(*i=0; *i<(*l-*coordlettre)*2; *i=*i+2)
                    {
                        gotoxy(13,14+i+*coordlettre*2);
                        printf("%c", *jeton);
                        Sleep(200);
                        gotoxy(13,14+i+*coordlettre*2);
                        printf(" ");
                    }
     
                    *l--;
                }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                afftab(&l0, &jeton, &coordlettre, &coord[2], &tab[6][6], &i);

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par lowwa132 Voir le message
    Ma question est donc : Que faire ? ^^
    Montrer la définition des variables.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Dans mon main ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        char tab[6][6];
        char coord[4], nom1[40], nom2[40];
        int i, j, choix, victoire, coordlettre, l0, l1, l2, l3, l4, l5;
        int a_accent=0x85;
        int e_grave=0x8A;
        int e_aigu=0x82;
        int u_accent=0x97;
        char lettreligne, retourmenu, jeton;

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par lowwa132 Voir le message
    Dans mon main ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        char tab[6][6];
        char coord[4], nom1[40], nom2[40];
        int i, j, choix, victoire, coordlettre, l0, l1, l2, l3, l4, l5;
        int a_accent=0x85;
        int e_grave=0x8A;
        int e_aigu=0x82;
        int u_accent=0x97;
        char lettreligne, retourmenu, jeton;
    Ceci compile. Je ne sais pas ce que tu veux faire exactement. Il me semble qu'on devrait pouvoir organiser les données en tableaux de structures...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <stdio.h>
    #include <windows.h>
    #include <conio2.h>
     
    void f (char const coord[], char tab[][6], int *pl, int jeton,
            int coordlettre)
    {
       if (coord[2] == '1')
       {
          int i;
          tab[*pl][0] = jeton;
          for (i = 0; i < (*pl - coordlettre) * 2; i = i + 2)
          {
             gotoxy (13, 14 + i + coordlettre * 2);
             printf ("%c", jeton);
             Sleep (200);
             gotoxy (13, 14 + i + coordlettre * 2);
             printf (" ");
          }
     
          (*pl)--;
       }
    }
     
    int main (void)
    {
       char tab[6][6] = { {0} };
       char coord[4] = { 0 };
       int coordlettre = 0;
       int l[6] = { 0 };
       int jeton = 0;
     
       int i;
       for (i = 0; i < 5; i++)
       {
          f (coord, tab, l + i, jeton, coordlettre);
       }
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Ca compile en effet, mais il doit y avoir un problème au niveau de la boucle car ça ne fait pas la même chose à l'affichage.

    Ce code est utilisé dans mon puissance 4.

    En fait, l[i] (c'est vrai que j'aurai pu faire passer l0... li sous forme de tableau) corresponds à la case dans laquelle doit se placer le pion (car le pion descend dans une grille verticale).
    Ma grille de jeu, c'est tab[6][6].

    Je demande à l'utilisateur de rentrer ses coordonnées et je le mets dans coord[4]. Les coordonnées doivent être saisies sous la forme b 4, donc je viens chercher le numéro de la colonne (4) avec coord[2].
    Je convertis la lettre placée dans coord[0] sous forme de chiffre et la stocke dans coordlettre.

    Le jeton est en fait un char, car il prends la valeur 'X' pour le joueur 1 et 'O' (O comme Ophélie) pour le joueur 2.


    Donc pour chaque colonne possible, je fais descendre le pion grace à l'affichage avec gotoxy (pour l'instant je ne m'occupe que de la colonne 1, il est sûr qu'après je devrai modifier x de gotoxy pour que cela fonctionne avec les autres colonnes).

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Ah je vois ce qu'il manque
    Avec
    Je veux en fait qu'il examine chacun des cas de coordonnées de colonnes, donc aller de coord[2] =='1' à coord [2] =='6'

    Je vais essayer de rajouter ce paramètre et je le poste.

    EDIT : Mouai ça merdouille :/

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Bon en gros pour simplifier car c'était vraiment pas clair je pense tout ça, j'ai créer une fonction afftab (qui marche).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                if(coord[2]=='1')
                {
                    tab[l0][0]=jeton;
                    afftab(&coordlettre, &coordchiffre, &jeton, &l0, &colorpion);
                    l0--;
                }
    Donc là manque plus qu'à faire une boucle je pense pour balayer toutes mes colonnes (et remettre un tableau pour "l" et non l0 l1...).

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par lowwa132 Voir le message
    j'ai créer une fonction afftab (qui marche).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    afftab(&coordlettre, &coordchiffre, &jeton, &l0, &colorpion);
    Pourquoi toutes ces adresses (&...) ? Pour un affichage, tu as l'intention de modifier des valeurs ?

    Tout serait plus clair si tu prenais le temps de réfléchir avant de coder.

    Ca ne signifie pas faire des tonnes de papier. Une simple méthode incrémentale suffit en partant du haut (main()) et en raffinant au fur et à mesure des besoins.

    Pour ça, il faut être à l'aise avec les fonctions et les algorithmes.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 45
    Points : 17
    Points
    17
    Par défaut
    Mon code fait 339 lignes et est déjà opérationnel.

    J'ai juste voulu l'optimiser en mettant dans une fonction l'affichage.
    L'affichage évolue car il dépends des coordonnées que le joueur rentre.

Discussions similaires

  1. Problème fonction affichage et pointeurs
    Par Glork dans le forum Débuter
    Réponses: 10
    Dernier message: 07/01/2013, 20h06
  2. Réponses: 11
    Dernier message: 25/03/2008, 23h12
  3. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  4. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31
  5. Problème passage de pointeur
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 21/04/2004, 18h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo