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 :

Besoin d'aide sur un return de tableaux, et passage pour un sous programme


Sujet :

C

  1. #1
    Invité
    Invité(e)
    Par défaut Besoin d'aide sur un return de tableaux, et passage pour un sous programme
    Salut à tous

    j'ai un problème, si quelqu'un peut m'aider à le résoudre, je suis preneur

    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
    41
    42
    43
    44
    45
    void achat(int acheteur[], S_joueur achat[])
    {
        int choix_territoire;
        printf("Avec quel territoire voulez-vous acheter ?\n");
        scanf("%d", &choix_territoire);
     
        switch (choix_territoire)
        {
        case 1://si il achat depuis le 1
            if(acheteur[1-1] > 1) //on verifie qu'il y a bien des troupes (plus d'une car une reste en défense)
            {
                printf("\n Qui voulez vous acheter ?");
                scanf("%d", &choix_territoire);
                if(choix_territoire == 2) 
                {
                    versus(acheteur, 0, proprietaire(2, achat), 1);
                }
        }
         }
    }
     
    int * proprietaire(int terre, S_joueur player[])
    {
        if(player[0].Territoire[terre-1] != 0)
        {
            return player[0].Territoire[terre-1];
        }
        else if(player[1].Territoire[terre-1] != 0) 
        {
            return player[1].Territoire[terre-1];
        }
        else if(player[2].Territoire[terre-1] != 0) 
        {
            return player[2].Territoire[terre-1];
        }
        return NULL;
    }
     
    void versus (int acheteur[], int TA, int Defenseur[], int TD)//deroulemnt d'un versus
    {
     
        int etat = 0;
        printf("\n\n\n%d", acheteur[TA]);
        printf("\n\n\n%d", Defenseur[TD]);
    }
    je vous explique;
    Je souhaiterais que le programme proprietaire renvoie le tableau d'un joueur(défenseur), mais quand j'affiche le tableau défenseur dans versus, il affiche 0, alors qu'il devrait afficher 2 (le nb d'unité)

    quelqu'un a une idée ?

    Merci d'avance

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par tng.ry Voir le message
    quelqu'un a une idée ?
    Sans avoir le détail de S_joueur c'est difficile. Toutefois en ligne 24 tu écris if(player[0].Territoire[terre-1] != 0) donc ça sous-entend que player[0].Territoire[terre-1] serait un int puisque tu le compares avec l'int 0. Puis en ligne 26 tu retournes justement ce player[0].Territoire[terre-1] donc tu retournes un entier. Or ta fonction est déclarée int étoile. Et un int étoile ce n'est pas un int.
    Et tous ces tests sur player[0].Territoire[terre-1], player[1].Territoire[terre-1], player[2].Territoire[terre-1] pourraient être avantageusement remplacés par une boucle !!! Ca sert justement à ça la boucle, à éviter de devoir connement répéter les mêmes instructions.

    Et (par rapport à ton titre) en C on ne peut pas retourner de tableaux car les tableaux se passent et se retournent par leurs adresses. Et si tu retournes l'adresse d'un tableau local, alors tu retournes l'adresse d'une variable locale donc qui disparait quand la fonction se termine.Le seul moyen de retourner un tableau (si vraiment c'est nécessaire) est alors de faire une alocation dynamique (malloc) dans la fonction puis de retourner l'adresse allouée. Le truc qu'on récupère n'est pas vraiment un tableau mais autorise les accès indexés donc se comporte comme un tableau.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Autant pour moi, je vous donne le détail de la structure de suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct joueur
    {
        char pseudo[TAILLE_PSEUDO];
        int Territoire[NB_TERRITOIRE];
    };
    typedef struct joueur S_joueur;
    A d'accord, et du coup tu aurais une idées si il faut que je return un int*, ou si je déclare la fonction en int seulement ?

    Et pour la boucle, j'avais pensé à quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i=0;
    For (i=0; i<2; i++)
    { if (player[i].Territoire[terre-1] != 0)
       {return player[i].Territoire[terre-1]}
    }
    merci d'avance
    Dernière modification par LittleWhite ; 24/06/2021 à 19h17. Motif: Pas besoin de citer l'intégralité du message précédent

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tng.ry Voir le message
    Autant pour moi, je vous donne le détail de la structure de suite.
    Ok, un joueur c'est un nom et une liste de nombres.

    Citation Envoyé par tng.ry Voir le message
    A d'accord, et du coup tu aurais une idées si il faut que je return un int*, ou si je déclare la fonction en int seulement ?
    Bah le C c'est pas du hasard dans lequel on lance des dés en espérant tomber sur la bonne valeur. Quel est le but de la fonction? Que veux-tu qu'elle produise et retourne à l'appelant? Là tu sauras quel type lui mettre. Pour l'instant, vu qu'elle retourne un int...

    Sinon pour la boucle oui c'est bon. Et t'as même pas besoin d'accolades au return.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le but de la fonction propriétaire est de déterminer à qui le territoire attaqué appartient, pour le passer au SSP versus. Je souhaiterais que la fonction propriétaire retourne le tableau du joueur à qui appartient le territoire, afin de le transmettre en tant que défenseur au SSP versus

    d'accord, merci
    Dernière modification par LittleWhite ; 24/06/2021 à 19h18. Motif: Pas besoin de citer l'intégralité du message précédent

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tng.ry Voir le message
    Le but de la fonction propriétaire est de déterminer à qui le territoire attaqué appartient, pour le passer au SSP versus. Je souhaiterais que la fonction propriétaire retourne le tableau du joueur à qui appartient le territoire, afin de le transmettre en tant que défenseur au SSP versus
    Ben désolé mais le joueur ce n'est pas un tableau, c'est "un" joueur. Ce joueur est soit représenté par son indice dans le tableau des joueurs (dans ce cas la fonction peut retourner ledit indice), soit par son adresse dans le même tableau (dans ce cas la fonction peut retourner ladite adresse)
    Donc soit la fonction est de type struct s_joueur* et retourne l'adresse du joueur [i] qui possède le territoire, soit la fonction est de type int et retourne l'indice "i" du joueur qui possède le territoire.
    Code c : 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
    S_joueur* proprietaire1(int terre, S_joueur player[]) {
    	size_t i;
    	S_joueur *pt;
    	for (i=0, pt=player; i < nb_joueurs; i++, pt++) {
    		if (pt->Territoire[terre-1] != 0) return pt;
    	}
    	return NULL;
    }
     
    size_t proprietaire2(int terre, S_joueur player[]) {
    	size_t i;
    	S_joueur *pt;
    	for (i=1, pt=player; i <= nb_joueurs; i++, pt++) {
    		if (pt->Territoire[terre-1] != 0) return i;
    	}
    	return 0;
    }
    Tu remarqueras que pour la seconde, je suis obligé de retourner la position (1, 2, 3) et non l'indice (0, 1, 2) pour distinguer le cas "0" signifiant "rien trouvé" et donc le test de fin c'est "i <= nb_joueurs" et non pas "i < nb_joueurs".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Besoin d'aide sur les tableaux en C++
    Par Kyndred40 dans le forum C++
    Réponses: 4
    Dernier message: 19/11/2019, 16h56
  2. [XL-2010] Besoins d'aide sur fonctions et tableaux
    Par Vishnou dans le forum Excel
    Réponses: 2
    Dernier message: 25/08/2010, 15h23
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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