Aide sur les structures
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
il y a peu de ten j'ai débuté en programmation en C. J'en suis actuellement a aprendre les structures. Un de mes code sources bug lors de l'execution , le voici:
Dans le fichier h:
#ifndef STRUCTURE2_H_INCLUDED
#define STRUCTURE2_H_INCLUDED
struct Pers
{
long age;
char prenom[1000];
};
#endif // STRUCTURE2_H_INCLUDED
Dans mon fichier C:
#include <stdio.h>
#include <stdlib.h>
#include "structure2.h"
int main()
{
long i;
struct Pers joueur[2];
for(i=0;i<2;i++)
{
printf("Votre age?");
scanf("%ld", joueur[i].age);
printf("Nom?");
scanf("%s", joueur[i].prenom);
}
printf("Joueur 1 : %s, %ld ans\n", joueur[0].age,joueur[0].prenom );
printf("Joueur 2 : %s, %ld ans\n", joueur[1].age,joueur[1].prenom );
return 0;
}
J'ai executé ceci avec code blocks 8.02.
Je voudré ke on demande le nom et l'age puis kon les ressorte au moyen d'une structure.
Je sais on peut faire autrement mais j'aimerai fer comme ça pour bien aprendre : aidez moi svp!!!!!!!!!
il y a peu de ten j'ai débuté en programmation en C. J'en suis actuellement a aprendre les structures. Un de mes code sources bug lors de l'execution , le voici:
Dans le fichier h:
#ifndef STRUCTURE2_H_INCLUDED
#define STRUCTURE2_H_INCLUDED
struct Pers
{
long age;
char prenom[1000];
};
#endif // STRUCTURE2_H_INCLUDED
Dans mon fichier C:
#include <stdio.h>
#include <stdlib.h>
#include "structure2.h"
int main()
{
long i;
struct Pers joueur[2];
for(i=0;i<2;i++)
{
printf("Votre age?");
scanf("%ld", joueur[i].age);
printf("Nom?");
scanf("%s", joueur[i].prenom);
}
printf("Joueur 1 : %s, %ld ans\n", joueur[0].age,joueur[0].prenom );
printf("Joueur 2 : %s, %ld ans\n", joueur[1].age,joueur[1].prenom );
return 0;
}
J'ai executé ceci avec code blocks 8.02.
Je voudré ke on demande le nom et l'age puis kon les ressorte au moyen d'une structure.
Je sais on peut faire autrement mais j'aimerai fer comme ça pour bien aprendre : aidez moi svp!!!!!!!!!
A voir également:
- Aide sur les structures
- Amandine utilise une application pour gérer les inscriptions aux activités de son club. dans le schéma (structure) de la base de données de l’application représenté ci-dessous : de quoi « telephone » est-il le nom ? de quoi « inscriptions » est-il le nom ? associez chaque terme avec un attribut, une donnée, un enregistrement, une table, une valeur ou une variable. - Forum Loisirs / Divertissements
- Les structures - Forum Programmation
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Les structures en C ✓ - Forum C
- Dans son restaurant, igor utilise une application pour gérer les réservations. dans le schéma (structure) de la base de données de l’application représenté ci-dessous : de quoi « telephone » est-il le nom ? de quoi « reservations » est-il le nom ? associez chaque terme avec un attribut, une donnée, un enregistrement, une table, une valeur ou une variable. - Forum Antivirus
5 réponses
Merci de faire un effort sur l'orthographe.
Premier conseil que je te donne, ça ne sert à rien d'utiliser des variables disproportionnées (par exemple un long pour compter jusqu'à 2 faut quand même pas pousser, un int suffit largement. Idem pour un prénom de longueur 1000). Dans le cas de l'âge il serait plus logique de stocker un unsigned (parce qu'un âge négatif c'est mauvais signe) qu'un long (je doute qu'il y ait des vénérables joueurs de plusieurs milliers d'années).
Ensuite tes problèmes viennent d'une mauvaise utilisation de scanf. Il faut que tu gardes à l'esprit qu'en C un paramètre de fonction est une recopie de la variable passée en paramètre. Ainsi une fonction ne peut modifier une variable déclarée en dehors de son scope (sa paire d'accolade) qu'au travers d'un pointeur. Il faut donc passer l'adresse de cette valeur à modifier (par exemple le champ age dans ta structure. Dans le cas d'une chaîne (ou buffer), le champ prenom est déjà une adresse (un char [ ] peut être vu comme un char *) donc on passe bien joueur[0].prenom et pas &joueur[0].prenom.
Dans tes printf tu as permuté les paramètres.
Je signale également que ton compilateur a dû t'envoyer une palanquée de warning, la première chose à faire c'est de les résoudre ! Ainsi ton programme corrigé ressemble à ça :
Pour le header :
Pour le fichier source :
Bonne chance
Premier conseil que je te donne, ça ne sert à rien d'utiliser des variables disproportionnées (par exemple un long pour compter jusqu'à 2 faut quand même pas pousser, un int suffit largement. Idem pour un prénom de longueur 1000). Dans le cas de l'âge il serait plus logique de stocker un unsigned (parce qu'un âge négatif c'est mauvais signe) qu'un long (je doute qu'il y ait des vénérables joueurs de plusieurs milliers d'années).
Ensuite tes problèmes viennent d'une mauvaise utilisation de scanf. Il faut que tu gardes à l'esprit qu'en C un paramètre de fonction est une recopie de la variable passée en paramètre. Ainsi une fonction ne peut modifier une variable déclarée en dehors de son scope (sa paire d'accolade) qu'au travers d'un pointeur. Il faut donc passer l'adresse de cette valeur à modifier (par exemple le champ age dans ta structure. Dans le cas d'une chaîne (ou buffer), le champ prenom est déjà une adresse (un char [ ] peut être vu comme un char *) donc on passe bien joueur[0].prenom et pas &joueur[0].prenom.
Dans tes printf tu as permuté les paramètres.
Je signale également que ton compilateur a dû t'envoyer une palanquée de warning, la première chose à faire c'est de les résoudre ! Ainsi ton programme corrigé ressemble à ça :
Pour le header :
struct Pers { unsigned age; char prenom[1000]; };
Pour le fichier source :
#include <stdio.h> #include <stdlib.h> int main() { long i; struct Pers joueur[2]; for(i=0;i<2;i++) { printf("Votre age? "); scanf("%d",&joueur[i].age); printf("Nom? "); scanf("%s",joueur[i].prenom); } printf("Joueur 1 : %s, %d ans\n",joueur[0].prenom,joueur[0].age); printf("Joueur 2 : %s, %d ans\n",joueur[1].prenom,joueur[1].age); return 0; }
Bonne chance
Copie colle ton code source actuel, celui que je t'ai donné compile sans problème sous linux. J'ai d'ailleurs oublié de changer le type de i (dans main) de long vers unsigned.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Cependant, je ne suis pas arriver à recompiler ce programme.
En effet une de mes ereur venait notament de la modification d'une variable hors de la fonction où elle avait été déclarer.Mais sans succés.
Je ne comprend pas pourquoi...
Voici la liste des warnings :
In function `main':|
warning: int format, long int arg (arg 2)|
warning: int format, long int arg (arg 3)|
warning: int format, long int arg (arg 3)|
||=== Build finished: 0 errors, 3 warnings ===|
Merci quand meme.