[C/C++] Problème de tableaux et pointeurs
Résolu/Fermé
ibac001
Messages postés
230
Date d'inscription
samedi 20 juin 2009
Statut
Membre
Dernière intervention
9 mai 2015
-
22 mai 2012 à 16:00
link15 Messages postés 15 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 6 juin 2012 - 6 juin 2012 à 00:48
link15 Messages postés 15 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 6 juin 2012 - 6 juin 2012 à 00:48
A voir également:
- [C/C++] Problème de tableaux et pointeurs
- Afficher un tableau en c - Forum C
- Tableaux croisés dynamiques - Guide
- Impossible d'afficher le rapport de tableau croisé dynamique sur un rapport existant ✓ - Forum Excel
- C++ tableau - Astuces et Solutions
- Fusionner deux tableaux excel - Guide
6 réponses
link15
Messages postés
15
Date d'inscription
dimanche 11 novembre 2007
Statut
Membre
Dernière intervention
6 juin 2012
22 mai 2012 à 16:28
22 mai 2012 à 16:28
tu envoie une structure dans ta fonction, du genre "void ma_fonction(utilisateur *joueur)" et dans ton main son appel sera plus du genre "ma_fonction(joueur)"
LeChikito
Messages postés
1589
Date d'inscription
lundi 19 mars 2012
Statut
Membre
Dernière intervention
3 août 2012
319
22 mai 2012 à 16:37
22 mai 2012 à 16:37
Bonjour,
Pour ton if, tu a meilleur temps de le laisser là où il est, même si un
Comme l'a dit link15, une fonction
Cordialement
Pour ton if, tu a meilleur temps de le laisser là où il est, même si un
if (nbjoueurs >=1 && nbjoueurs <= 4)est plus "beau".
Comme l'a dit link15, une fonction
void fonction(utilisateur *joueur)
{
printf ("\nLe joueur %d s'appelle %s %s habite %s et a %d ans\n", j+1,
joueur.prenom, joueur.nom, joueur.ville, joueur.age );
}que tu appelle via
fonction(joueur[j])te satisferas grandement.
Cordialement
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 22/05/2012 à 17:33
Modifié par JooS le 22/05/2012 à 17:33
Salut !
Exemple !
Mettez en résolu quand c'est résolu -.- ... ...
Exemple !
utilisateur * remplirTableau(int nombre_de_joueur) {
utilisateur *joueur = NULL;
int i;
if (nombre_de_joueur > 0 && nombre_de_joueur < 5)
{
joueur = (utilisateur *) malloc(sizeof(utilisateur)*nombre_de_joueur);
for (i=0; i<nombre_de_joueur; i++)
{
printf (" Joueur %d, quel est ton prenom?\t\t", i+1);
scanf ("%s", joueur[i].prenom);
printf ("\n Et ton nom de famille?\t\t\t");
scanf ("%s", joueur[i].nom);
printf ("\n Enfin, dans quelle ville habites-tu?\t");
scanf ("%s", joueur[i].ville);
printf ("\n Quel age as-tu?\t\t\t");
scanf ("%d", &joueur[i].age);
printf ("\n--------------------------------------------------------\n");
}
}
return joueur;
}
//-------------------------------------
void main() {
utilisateur *liste;
int i;
liste = remplirTableau(2); // 2 étant le nombre d'utilisateur
if(liste == NULL) printf("Nombre d'utilisateur incorrect.");
else {
//AFFICHAGE DES DONNEES
}
}
Mettez en résolu quand c'est résolu -.- ... ...
ibac001
Messages postés
230
Date d'inscription
samedi 20 juin 2009
Statut
Membre
Dernière intervention
9 mai 2015
29
22 mai 2012 à 20:30
22 mai 2012 à 20:30
(Re)Bonjour,
Tout d'abord merci à vous pour vos réponses rapide.
Alors voilà, j'ai testé globalement ce que vous m'avez proposé, mais j'ai un problème, le code fonctionne mais uniquement pour l'affichage du joueur1, au delà il ne me met que les adresses des variables... Et je ne comprend pas donc...
Ma fonction est
Et quand je l'appelle je fait
Je ne comprend vraiment pas...
De plus, j'aimerai créer une fonction qui contiendrai
Et qui me renverrai mon tableau de joueur complet et près à être utilisé dans le main...
Merci d'avance!
PS : en effet, mon if est très moche XD mais j'avais la flemme...
Tout d'abord merci à vous pour vos réponses rapide.
Alors voilà, j'ai testé globalement ce que vous m'avez proposé, mais j'ai un problème, le code fonctionne mais uniquement pour l'affichage du joueur1, au delà il ne me met que les adresses des variables... Et je ne comprend pas donc...
Ma fonction est
void info_joueur (utilisateur joueur[], int j)
{
printf ("\nLe joueur %d s'appelle %s %s habite %s et a %d ans\n", j+1, joueur[j].prenom, joueur[j].nom, joueur[j].ville, joueur[j].age );
}
Et quand je l'appelle je fait
int j;
for (j=0; j<nombre_de_joueur; j++)
{
info_joueur (&joueur[j], j) ;
}
Je ne comprend vraiment pas...
De plus, j'aimerai créer une fonction qui contiendrai
int i;
for (i=0; i<nombre_de_joueur; i++)
{
printf (" Joueur %d, quel est ton prenom?\t\t", i+1);
scanf ("%s", joueur[i].prenom);
printf ("\n Et ton nom de famille?\t\t\t");
scanf ("%s", joueur[i].nom);
printf ("\n Enfin, dans quelle ville habites-tu?\t");
scanf ("%s", joueur[i].ville);
printf ("\n Quel age as-tu?\t\t\t");
scanf ("%d", &joueur[i].age);
printf ("\n--------------------------------------------------------------------------\n");
}
Et qui me renverrai mon tableau de joueur complet et près à être utilisé dans le main...
Merci d'avance!
PS : en effet, mon if est très moche XD mais j'avais la flemme...
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
23 mai 2012 à 00:39
23 mai 2012 à 00:39
t'as tester au moins ce que j'ai proposer !
ibac001
Messages postés
230
Date d'inscription
samedi 20 juin 2009
Statut
Membre
Dernière intervention
9 mai 2015
29
23 mai 2012 à 01:20
23 mai 2012 à 01:20
En fait pour tout dire, je me sens un peu con... Je ne comprend pas ton code à vrai dire... Je ne sais pas ce qu'est "malloc"... par exemple (Je suis novice!)
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 23/05/2012 à 17:35
Modifié par JooS le 23/05/2012 à 17:35
joueur = (utilisateur *) malloc(sizeof(utilisateur)*nombre_de_joueur);
sizeof(utilisateur) = x : retourne le nombre d'octet que nécessite la structure utilisateur en mémoire.
malloc(sizeof(utilisateur)*nombre_de_joueur) : Alloue un espace de taille x * nbr de joueur !
(utilisateur *) : pour forcer la conversion du type de pointeur renvoyé par malloc.
joueur : Le pointeur ou on va stocker l'adresse du premier octet du bloc qu'on a allouer.
Tu pourrais me dire, pourquoi n'attons pas déclarer un tableau directement(statiquement), et travailler deçu !
1 - Parce que une fois ton tableau rempli dans la fonction, tu ne pourra pas le renvoyer avec un return, car le langage C ne le permet pas.
2 - Parce que une fois ta fonction achevé, toutes les variables déclaré statiquement seront supprimé de la mémoire, donc ton tableau sera supprimé aussi.
-------------
Donc ce que la fonction fait !
- On alloue l'espace nécessaire (dynamiquement).
- On le rempli (nom, prenom ...).
- On renvoi l'adresse du premier octet de cet espace, or, un pointeur.
- On récupère(enregistre) ce pointeur dans le main, et on fait l'affichage normalement.
sizeof(utilisateur) = x : retourne le nombre d'octet que nécessite la structure utilisateur en mémoire.
malloc(sizeof(utilisateur)*nombre_de_joueur) : Alloue un espace de taille x * nbr de joueur !
(utilisateur *) : pour forcer la conversion du type de pointeur renvoyé par malloc.
joueur : Le pointeur ou on va stocker l'adresse du premier octet du bloc qu'on a allouer.
Tu pourrais me dire, pourquoi n'attons pas déclarer un tableau directement(statiquement), et travailler deçu !
1 - Parce que une fois ton tableau rempli dans la fonction, tu ne pourra pas le renvoyer avec un return, car le langage C ne le permet pas.
2 - Parce que une fois ta fonction achevé, toutes les variables déclaré statiquement seront supprimé de la mémoire, donc ton tableau sera supprimé aussi.
-------------
Donc ce que la fonction fait !
- On alloue l'espace nécessaire (dynamiquement).
- On le rempli (nom, prenom ...).
- On renvoi l'adresse du premier octet de cet espace, or, un pointeur.
- On récupère(enregistre) ce pointeur dans le main, et on fait l'affichage normalement.
link15
Messages postés
15
Date d'inscription
dimanche 11 novembre 2007
Statut
Membre
Dernière intervention
6 juin 2012
23 mai 2012 à 21:03
23 mai 2012 à 21:03
ou alors on travaille directement sur la mémoire sans re-déclarer une structure à chaque fois.
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
23 mai 2012 à 21:34
23 mai 2012 à 21:34
Comment ça ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
link15
Messages postés
15
Date d'inscription
dimanche 11 novembre 2007
Statut
Membre
Dernière intervention
6 juin 2012
23 mai 2012 à 02:00
23 mai 2012 à 02:00
Quand tu appelle ta fonction essaie ça:
int main()
{
for (j=0; j<nombre_de_joueur; j++)
{
info_joueur (&joueur, j) ;
}
}
void ma_fonction(utilisateur *joueur[], int j)
{
int i;
for (i=0; i<nombre_de_joueur; i++)
{
printf (" Joueur %d, quel est ton prenom?\t\t", i+1);
scanf ("%s", joueur[i]->prenom);
printf ("\n Et ton nom de famille?\t\t\t");
scanf ("%s", joueur[i]->nom);
printf ("\n Enfin, dans quelle ville habites-tu?\t");
scanf ("%s", joueur[i]->ville);
printf ("\n Quel age as-tu?\t\t\t");
scanf ("%d", joueur[i]->age);
printf ("\n--------------------------------------------------------------------------\n");
}
}
Je me demande comment ça ce fait que tu n'ai pas d'erreur d'ailleurs x)
int main()
{
for (j=0; j<nombre_de_joueur; j++)
{
info_joueur (&joueur, j) ;
}
}
void ma_fonction(utilisateur *joueur[], int j)
{
int i;
for (i=0; i<nombre_de_joueur; i++)
{
printf (" Joueur %d, quel est ton prenom?\t\t", i+1);
scanf ("%s", joueur[i]->prenom);
printf ("\n Et ton nom de famille?\t\t\t");
scanf ("%s", joueur[i]->nom);
printf ("\n Enfin, dans quelle ville habites-tu?\t");
scanf ("%s", joueur[i]->ville);
printf ("\n Quel age as-tu?\t\t\t");
scanf ("%d", joueur[i]->age);
printf ("\n--------------------------------------------------------------------------\n");
}
}
Je me demande comment ça ce fait que tu n'ai pas d'erreur d'ailleurs x)
ibac001
Messages postés
230
Date d'inscription
samedi 20 juin 2009
Statut
Membre
Dernière intervention
9 mai 2015
29
27 mai 2012 à 10:16
27 mai 2012 à 10:16
J'ai fini par trouvé... En refaisant quelques chose que mon IDE m'avait refusé la première fois... J'ai essayé toute les combinaisons possible avec l'appelle de ma fonction, et ça a fini par marcher en réutilisant l'astuce de link15 qui m'avait renvoyé des adresses la première fois.
Je garde dans un coin de ma tête l'idée de JooS qui pourrait m'être utile dans de futurs programme. Je posterai le code complet d'ici quelques jours, ça pourra peut-être un jour en aider d'autre ;)
MERCI A TOUS!!!!!
Je garde dans un coin de ma tête l'idée de JooS qui pourrait m'être utile dans de futurs programme. Je posterai le code complet d'ici quelques jours, ça pourra peut-être un jour en aider d'autre ;)
MERCI A TOUS!!!!!
ibac001
Messages postés
230
Date d'inscription
samedi 20 juin 2009
Statut
Membre
Dernière intervention
9 mai 2015
29
5 juin 2012 à 15:41
5 juin 2012 à 15:41
#include <stdio.h>
#include <stdlib.h>
#include "Structure.h" // On inclue le fichier contenant les structures et prototypes
int main()
{
int nombre_de_joueur = 0;
utilisateur joueur[4];
printf ("\n Combien de joueurs? (4 au maximum)\n\t\t");
scanf ("%d", &nombre_de_joueur);
printf ("\n\n");
if (nombre_de_joueur == 1 || nombre_de_joueur == 2 || nombre_de_joueur == 3 || nombre_de_joueur == 4)
{
int i;
for (i=0; i<nombre_de_joueur; i++)
{
printf (" Joueur %d, quel est ton prenom?\t\t", i+1);
scanf ("%s", joueur[i].prenom);
printf ("\n Et ton nom de famille?\t\t\t");
scanf ("%s", joueur[i].nom);
printf ("\n Enfin, dans quelle ville habites-tu?\t");
scanf ("%s", joueur[i].ville);
printf ("\n Quel age as-tu?\t\t\t");
scanf ("%d", &joueur[i].age);
printf ("\n--------------------------------------------------------------------------\n");
}
int j;
for (j=0; j<nombre_de_joueur; j++)
{
info_joueur (joueur, j) ;
}
}
else {printf ("\n\tTrop de joueur\n\n");}
return 0;
}
#include <stdlib.h>
#include "Structure.h" // On inclue le fichier contenant les structures et prototypes
int main()
{
int nombre_de_joueur = 0;
utilisateur joueur[4];
printf ("\n Combien de joueurs? (4 au maximum)\n\t\t");
scanf ("%d", &nombre_de_joueur);
printf ("\n\n");
if (nombre_de_joueur == 1 || nombre_de_joueur == 2 || nombre_de_joueur == 3 || nombre_de_joueur == 4)
{
int i;
for (i=0; i<nombre_de_joueur; i++)
{
printf (" Joueur %d, quel est ton prenom?\t\t", i+1);
scanf ("%s", joueur[i].prenom);
printf ("\n Et ton nom de famille?\t\t\t");
scanf ("%s", joueur[i].nom);
printf ("\n Enfin, dans quelle ville habites-tu?\t");
scanf ("%s", joueur[i].ville);
printf ("\n Quel age as-tu?\t\t\t");
scanf ("%d", &joueur[i].age);
printf ("\n--------------------------------------------------------------------------\n");
}
int j;
for (j=0; j<nombre_de_joueur; j++)
{
info_joueur (joueur, j) ;
}
}
else {printf ("\n\tTrop de joueur\n\n");}
return 0;
}
link15
Messages postés
15
Date d'inscription
dimanche 11 novembre 2007
Statut
Membre
Dernière intervention
6 juin 2012
6 juin 2012 à 00:48
6 juin 2012 à 00:48
Je suis content si j'ai pu t'aider. :D