Aller au menu - Aller au contenu

Créez vos propres types de variables

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  ...  6  7  8  9  10  Suivante
Pseudo Commentaire
Page Précédente  1  2  3  ...  6  7  8  9  10  Suivante
Hors ligne aspirator # Posté le 28/07/2011 à 03:02:54

Avis : Très bon

bonsoir tout le monde.
j'ai fait le petit exercice de mateo, cependant j'ai un souci quant à l'adresse.
Si je met des espaces, le programme bug de facon très bizarre (en même temps, tous les bugs sont un peu bizarre :lol: )
voici mon code
Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
#include <string.h>

int main()
{
    renseignement joueur[2];

    int i = 0, g = 1;
    int tailletableau = 2;
    for (i=0;i<tailletableau;i++,g++)
    {
        printf ("bienvenu joueur %d\n\n",g);
        printf("votre nom??\n");
        scanf ("%s",joueur[i].nom);
        printf("votre prenom??\n");
        scanf("%s",joueur[i].prenom);
        printf("votre adresse??\n");
        scanf("%s",joueur[i].adresse);
        printf("votre age??\n");
        scanf("%d",&joueur[i].age);
        printf ("tu t'apelles donc %s %s,\n tu habite %s et tu as %d ans \n\n\n", joueur[i].nom, joueur[i].prenom, joueur[i].adresse, joueur[i].age);
    }

    return 0;
}


et le main.h

Code : C
1
2
3
4
5
6
7
8
9
typedef struct renseignement renseignement;
struct renseignement
{
    char nom[100];
    char prenom[100];
    char adresse[1000];

    int age;
};


si quelqu'un a une idée je suis preneur :-°
Hors ligne 666by # Posté le 28/07/2011 à 12:06:50
Avatar

Avis : Très bon

Bonjour,
Un petit tutoriel annexe qui explique et résous le problème:
http://www.siteduzero.com/tutoriel-3-1 [...] ecurisee.html

- Pourquoi on inventerai pas la bêtise artificiel ?
- Elle est déjà trop présente naturellement.
 
Hors ligne aspirator # Posté le 29/07/2011 à 01:24:27

Avis : Très bon

bonsoir bonsoir.
merci 666by , décidément tu es mon sauveur ^^
ce qui m'étonne c'est qu'il n'y est que moi qui ait ce problème :o
encore merci, je lirai ça tranquillement
Hors ligne omiste # Posté le 01/08/2011 à 17:04:00

J'ai rajouté 2-3 trucs pour m'amuser :)

le main.c

Code : C
 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"


int main()
{
    Info joueur[3];
    int i = 1, j = 1, verification, villeIdentique;

    printf("***** Bonjour *****\n\n");
    printf("Merci de vous presenter pour en savoir un peu plus sur vous.\n\n");
    printf("Commence on par le joueur %d logiquement !\n\n", j);

    // Boucle de demande de renseignement pour le 1er joueur !
    do
     {

    printf("Quel est votre prenom ?");
    scanf("%s", &joueur[i].prenom);
    printf("Tres jolie ! Et votre nom ?");
    scanf("%s", &joueur[i].nom);
    printf("Et vous habitez ?");
    scanf("%s", &joueur[i].ville);
    printf("Quel age avez vous ?");
    scanf("%d", &joueur[i].age);

    printf("\nJ'en pose des questions !\n Donc si on resume : Vous vous appelez %s %s, vous habitez %s et vous avez %d ans !\n\n", joueur[i].prenom, joueur[i].nom, joueur[i].ville, joueur[i].age);

    printf("C'est bien ca ? Oui - 1, Non - 0\n");
    scanf("%d", &verification);
    }while(verification == 0);
    printf("\n\n");
    printf("Parfait !\n");

    // Boucle de renseignement pour le deuxieme joueur !
    printf("Passons au joueur suivant :\n");
    printf("Comment t'appeles tu ?");
    scanf("%s", &joueur[i].prenom);
    printf("%s comment ?", joueur[i].prenom);
    scanf("%s", &joueur[i].nom);
    printf("Tu es de la meme ville que l'autre joueur ?\n Oui - 1, Non - 0\n");
    scanf("%d", &villeIdentique);

    // condition de la ville
    if(villeIdentique == 0)
    {
        printf("Donc vous venez d'ou ?");
        scanf("%s", &joueur[i].ville);
    }
    else
    {
        printf("Vous etes donc de %s", joueur[1].ville);
    }

    printf("Et quel age avez vous ?");
    scanf("%d", &joueur[i].age);
    printf("\n\n");

    printf("Vous vous appelez %s %s vous habitez %s et vous avez %d ans", joueur[i].prenom, joueur[i].nom, joueur[i].ville, joueur[i].age);


    return 0;
}


et le main.h

Code : C
1
2
3
4
5
6
7
8
9
typedef struct Info Info;
struct Info
{
    char prenom[100];
    char nom[100];
    char ville[100];

    int age;
};


Voilà ^^
Hors ligne Vragh # Posté le 06/08/2011 à 20:38:16

Ville : Nîmes
Pays : France métropolitaine

Bonjour, je viens d'essayer l'exercice, mais j'ai un souci, lorsque je rentre l'age, le programme plante, je pense que l'erreur est due à la boucle, vu que la demande de l'âge est à la fin de celle-ci...


Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Personne Personne;
struct Personne
{
    char nom[100];
    char prenom[100];
    char adresse[1000];

    int age;
    int garcon;
};

int main(int argc, char *argv[])
{

    int i = 0;

    while (i < 3)
    {
    Personne joueur[i];

    printf("Nom ? ");
    scanf ("%s", joueur[i].nom);
    printf("Prenom ? ");
    scanf("%s", joueur[i].prenom);
    printf("Ville ?");
    scanf("%s", joueur[i].adresse);
    printf("Age ? ");
    scanf("%d", &joueur[i].age);
    i++;
    }

    while (i < 3)
    {
        Personne joueur[i];

        printf("Le joueur %d s'appelle %s %s, vit a %s et a %d ans", i, joueur[i].nom, joueur[i].prenom, joueur[i].adresse, joueur[i].age);
        i ++;
    }
    return 0;
}


Je le fait juste pour les tests, donc les questions sont rudimentaires :-°
Je n'ai pas non plus réussi à avoir le bon raisonnement pour demander si l'utilisateur est une fille ou un garçon avec un booléen...

Je vais continuer de tâtonner, mais j'aimerai bien qu'on m'aiguille sur la bonne voie en me montrant mon ou mes erreurs s'il vous plaît !
Hors ligne Itch'nak # Posté le 07/08/2011 à 14:24:18
Avatar

Avis : Très bon

Non, ce n'est pas la boucle qui ne fonctionne pas je pense.

Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Personne Personne;
struct Personne
{
    char nom[100];
    char prenom[100];
    char adresse[1000];

    int age;
    int garcon;
};

int main(int argc, char *argv[])
{

    int i = 0;
    Personne joueur[i];
    while (i < 3)
    {
    printf("Nom ? ");
    scanf ("%s", joueur[i].nom);
    printf("Prenom ? ");
    scanf("%s", joueur[i].prenom);
    printf("Ville ? ");
    scanf("%s", joueur[i].adresse);
    printf("Age ? ");
    scanf("%d", &joueur[i].age);
    printf("C'est la boucle qui ne marche pas si ce texte s'affiche !\n");
    i++;
    }

    while (i < 3)
    {
        Personne joueur[i];

        printf("Le joueur %d s'appelle %s %s, vit a %s et a %d ans", i, joueur[i].nom, joueur[i].prenom, joueur[i].adresse, joueur[i].age);
        i ++;
    }
    return 0;
}


Tu regardes le printf après le scanf pour avoir l'age ne s'affiche, donc c'est la récupération de age qui ne fonctionne pas. Mais je ne sais pas pourquoi, ça ne fait pas longtemps que je fais du C ...

90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.
 
Hors ligne Itch'nak # Posté le 07/08/2011 à 14:43:16
Avatar

Avis : Très bon

Mets 100 à la place de i, et sors la déclaration de joueur de la boucle, moi ça marche.

Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Personne Personne;
struct Personne
{
    char nom[100];
    char prenom[100];
    char adresse[1000];

    int age;
    int garcon;
};

int main(int argc, char *argv[])
{

    int i = 0;
    Personne joueur[100];
    while (i < 3)
    {
    printf("Nom ? ");
    scanf ("%s", joueur[i].nom);
    printf("Prenom ? ");
    scanf("%s", joueur[i].prenom);
    printf("Ville ?");
    scanf("%s", joueur[i].adresse);
    printf("Age ? ");
    scanf("%d", &joueur[i].age);
    i++;
    }

    while (i < 3)
    {
        Personne joueur[i];

        printf("Le joueur %d s'appelle %s %s, vit a %s et a %d ans", i, joueur[i].nom, joueur[i].prenom, joueur[i].adresse, joueur[i].age);
        i ++;
    }
    return 0;
}

90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.
 
Hors ligne Vragh # Posté le 07/08/2011 à 15:14:47

Ville : Nîmes
Pays : France métropolitaine

Bonjour, et merci pour l'aide, donc j'ai modifié le code :

Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NOMBRE_PERSONNES 2

typedef struct Personne Personne;
struct Personne
{
    char nom[100];
    char prenom[100];
    char adresse[1000];

    int age;
};

int main(int argc, char *argv[])
{

    int i = 0;
    Personne joueur[NOMBRE_PERSONNES];
    while (i < NOMBRE_PERSONNES)
    {

    printf("Nom ? ");
    scanf ("%s", joueur[i].nom);
    printf("Prenom ? ");
    scanf("%s", joueur[i].prenom);
    printf("Ville ? ");
    scanf("%s", joueur[i].adresse);
    printf("Age ? ");
    scanf("%d", &joueur[i].age);
    i++;
    }

    while (i < NOMBRE_PERSONNES)
    {
        Personne joueur[i];

        printf("Le joueur %d s'appelle %s %s, vit a %s et a %d ans", i, joueur[i].nom, joueur[i].prenom, joueur[i].adresse, joueur[i].age);
        i ++;
    }
    return 0;
}


Donc maintenant, lorsque le joueur 1 a rempli ses infos, la boucle oeuvre et on repose les questions, mais quand c'est fini, ça met fin au programme sans afficher les données :colere2:
Du coup je vais refaire des tests, je verrais bien, dites moi si vous voyez une erreur quelque part, merci !!
Hors ligne Itch'nak # Posté le 07/08/2011 à 15:56:34
Avatar

Avis : Très bon

C'est normal
Pour la première boucle, tu demandes que ça s'effectue tant que i < NOMBRE_PERSONNES .
Donc, pour la première boucle, ça reste à la même valeur ! Elle ne s'effectue donc pas !
Mets une initialisation de i à 0 entre les deux boucles, ça devrait fonctionner ^^

90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.
 
Hors ligne Vragh # Posté le 07/08/2011 à 16:25:33

Ville : Nîmes
Pays : France métropolitaine

Ah en effet, merci, par contre je viens de le changer et j'ai un soucis dans l'affichage des données, ça ne met pas ce qui est entré, je vais voir pourquoi !
Connecté aha2011 # Posté le 12/08/2011 à 10:14:10

J'ai besoin de valider mon programme de saisie des donneés des users :
j'ai ecrit 2 fichier main.c et main.h
le contenu de .c est le suivant:
#include <stdio.h>
#include <stdlib.h>
#include "main.h"

int main(int argc, char *argv[])
{
int NombreDeJoueur = 0;
int i = 0;
Personne joueur [NombreDeJoueur];
printf("combien de joueur : ");
scanf("%d",&NombreDeJoueur);

for (i=0; i<NombreDeJoueur; i++)
{
printf("joueur numero %d::\n",i+1);
initialiserCoordonnees(i, &joueur[i]);
}
DisplayTeam (&joueur[NombreDeJoueur]);

return 0;
}

void initialiserCoordonnees(int j, Personne joueur[j])
{
printf("Quel est votre nom ? ");
scanf("%s",joueur[j].nom);
printf("Votre prenom ? ");
scanf("%s",joueur[j].prenom);
printf("Homme(1) ou Femme (0): ");
scanf("%d\n", &joueur[j].sexe);
printf("quelle age avez vous? ");
scanf("%d\n", &joueur[j].age);
}

void DisplayTeam( Personne joueur[])
{
int k = 0;
for (k=0; k<= NombreDeJoueur; k++)
{

if (joueur[k].sexe==1)
{
printf("joueur numero %d est appele %s %s, c'est un homme et il a %d ans, Bienvenue", k+1, joueur[k].prenom, joueur[k].nom,joueur[k].age);

}
else
{
printf("joueur numero %d est appele %s %s, c'est une femme et elle a %d ans, Bienvenue", k+1, joueur[k].prenom, joueur[k].nom,joueur[k].age);
}
}
}

============================================
le contenu de .h est le suivant :


typedef struct Personne Personne;
struct Personne
{
char nom[100];
char prenom[100];
char adresse[1000];

int age;
int sexe; // Booléen : 1 = Homme, 0 = Femme
};
int NombreDeJoueur = 0;
void initialiserCoordonnees(int i, Personne joueur[]);
void DisplayTeam(Personne joueur[]);

==========================
le programm n'affiche pas d'erreur
sauf que durant l'execution, lorsque j'arrive a la saisie de sexe, il me rend une erreur window disant :
main.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru

je ne comprend pas la cause.
aussi le debug etape par etape:
Building to ensure sources are up-to-date
Build succeeded
Selecting target:
Debug
Adding source dir: F:\backup F\Embarqué\joueur_saisie\saisie_joueur\
Adding source dir: F:\backup F\Embarqué\joueur_saisie\
Adding file: bin\Debug\saisie_joueur.exe
Starting debugger:
done
Registered new type: wxString
Registered new type: STL String
Registered new type: STL Vector
Setting breakpoints
Debugger name and version: GNU gdb 6.8
Warning: F:/BACKUP~1/EMBARQUÉ/JOUEUR~1/SAISIE~1: No such file or directory.
Warning: F:/BACKUP~1/EMBARQUÉ/JOUEUR~1: No such file or directory.
Child process PID: 392
Program received signal SIGSEGV, Segmentation fault.
In wscanf () (C:\WINDOWS\system32\msvcrt.dll)

#0 77C14995 wscanf() (C:\WINDOWS\system32\msvcrt.dll:??)
#1 00000000 0x00000000 in ??() (??:??)


avez vous une idée la cause?

cordialement,
Hors ligne Mndrs78 # Posté le 15/08/2011 à 16:05:09
Voir eux, comme toi
Avatar

Avis : Très bon

Voila le bien avec présentation et 4 joueurs maxi :

main.c
Code : C
 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <stdlib.h>
#include "main.h"

int main(int argc, char *argv[])
{
    int i, j=0, numberPlayers = 0;
    int sexe;

    printf("\n\t Bienvenue au jeu du Pendu !\n");

    while (numberPlayers < 1 || numberPlayers > 4) // Choix nombre de joueurs  avec message d'erreur
    {
        if (j > 0)
        {
            printf("\n\t Desole, un maximum de 4 joueurs est autorise.");
            if (j==4)
            {
                printf("\n\n\t Le programme va s'arreter, car vous ne comprenez pas\n\t qu'un maximum de 4 joeurs est autorises.\n\n");
                return 0;
            }
        }
        j++;
        printf("\n\t Combien de joueurs etes vous ? ");
        scanf("%d", &numberPlayers);
    }

    Person players[numberPlayers];

    for (i=0 ; i < numberPlayers ; i++) // Entrée des informations des joueurs
    {
        printf("\n\n\t Joueur %d", i + 1);
        printf("\n\t _________ ");
        printf("\n\n Nom : ");
        scanf("%s", players[i].lastName);
        printf(" Prenom : ");
        scanf("%s", players[i].firstName);
        printf(" Age : ");
        scanf("%d", &players[i].age);
        printf(" Sexe (M ou F) : ");
        scanf("%s", players[i].genderLetter);

        sexe = *players[i].genderLetter;

        if(sexe == 'M' || sexe == 'm')
        {
            sprintf(players[i].gender, "Masculin");
            }
        else if (sexe == 'F' || sexe == 'f')
        {
            sprintf(players[i].gender, "Feminin");
            }
        else { sprintf(players[i].gender, "Inconnu"); }

    }



    printf("\n\n\n\t Liste des joueurs\n\t _______________________________\n\n"); // Affichage des joueurs

    for (i=0 ; i < numberPlayers ; i++)
    {
    printf("Joueur %d : %s %s, %d ans et de sexe %s.\n\n", i + 1, players[i].lastName, players[i].firstName, players[i].age, players[i].gender);
    }

    printf("\n\n\n\n\n\n\n");

    return 0;
}


et main.h
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#ifndef DEF_MAIN
#define DEF_MAIN

typedef struct Person Person;
struct Person
{
    char lastName[25];
    char firstName[25];
    char gender[10];
    char genderLetter[1];

    int age;

};

#endif

T ant que l'homme ne voudras pas pour les autres comme il le veut pour lui,
L homme ne sera humain.
 
Hors ligne tetramir # Posté le 23/08/2011 à 20:06:00

Alors moi j'ai un petit problème, c'est que lorsque j'affiche l'age il me donne l'adresse de la variable et cela même si je met : scanf("%d",&joueur[1].age);

Bon je vous don le code...
Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"



 int main()
 {

     printf("*****Bienvenue*****\n\n\n");
     int Nombre_Joueur = 1;

        personne joueur[2];

       int i=0, g = 0;

       do
       {
           g++;
           printf("bonjour, joueur %d !",g);

           printf("quel est ton nom?\n");
           scanf("%s",joueur[i].nom);
           printf("\n quel est ton prenom?\n");
           scanf("%s",joueur[i].prenom);
           printf("\n quel est ton age?\n");
           scanf("%d",joueur[i].age);

           i++;


       }while(i < Nombre_Joueur);

       g=1;

       for(i = 0; i< Nombre_Joueur; i++)
       {
           printf("\n bon je resume le joueur %d s'appel %s %s et a %d ans... \n\n",g,joueur[i].nom,joueur[i].prenom,joueur[i].age);
           g++;
       }
 }


ah non c'est bon il fallait mette * devant joueur[i].age lorsque j'affichais la variable
Hors ligne mandragore # Posté le 04/09/2011 à 16:09:50

Bonjour , j ai un problème avec mon code ! il ne m indique pas le dernier nom ! la console me sort un symbole étrange a la place du dernier nom

main.c
Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include "main.h"




int main(int argc, char *argv[])
{
utilisateur joueur[2];

printf("Joueur 1 entrez votre nom\n\n");
scanf("%s",joueur[1].nom);
printf("\n");
printf("votre prenom\n\n");
scanf("%s",joueur[1].prenom);
printf("\n");
printf("Joueur 2 entrez votre nom\n\n");
scanf("%s",joueur[2].nom);
printf("\n");
printf("votre prenom\n\n");
scanf("%s",joueur[2].prenom);
printf("\n");
int i;

for(i = 1 ; i < 3 ; i++)
{
    printf("Vous etes %s %s !",joueur[i].prenom,joueur[i].nom);
    printf("\n");
}
    return 0;
}


main.h
Code : C
1
2
3
4
5
6
typedef struct Personne utilisateur;
struct Personne
    {
        char nom[200];
        char prenom[200];
    };


resolu : Erreur dans les entrés de tableau
Hors ligne romikan6 # Posté le 11/09/2011 à 12:18:36
Avatar

Bonjour, alors j'ai suivi le cours des structures avec attention;
Mais j'ai tout de même une question
Voici un exemple de structure:
Code : C
1
2
3
4
5
6
7
typedef struct logpass
{ 
  char login[CMAX];
  char password[HMAX];
  struct logpass * fg;
  struct logpass * fd;
} NLOGPASS;

Ici je déclare 2 chaines de caractères (login et password)
Ensuite je ne comprends pas bien : je déclare 2 pointeurs fg et fd mais pk "struct logpass" devant *fd et *fg

Merci
R.K
Hors ligne garoune # Posté le 13/09/2011 à 10:46:07

pour ceux qui ne veulent pas passer par la fonction scanf, il faut faire un strcpy
Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct Personne Personne;
struct Personne
{
    char nom[100];
    char prenom[100];
    int age;

};



int main(int argc, char *argv[])
{
    Personne joueur[3];
    joueur[0].age= 4;
    strcpy(joueur[0].nom,"delapince");
    strcpy(joueur[0].prenom,"romano");
    joueur[1].age=20;
    strcpy(joueur[1].nom,"bourne");
    strcpy(joueur[1].prenom,"jason");
    joueur[2].age= 30;
    strcpy(joueur[2].nom,"zinedine");
    strcpy(joueur[2].prenom,"zidane");
    int i;
    for (i=0;i<3;i++)
    {
        printf("le joueur %d est %s %s et a %d ans\n",i,joueur[i].nom,joueur[i].prenom, joueur[i].age);
    }
    
}


enjoy
Hors ligne nioubiP # Posté le 04/10/2011 à 23:03:55

Bonjour
D'abord un grand bravo pour ce site ultra-didactique. On a même l'impression de tout comprendre. Un peu trop parfois car la pratique vous ramène à la dure réalité! ;)
Tous ca pour dire que quelque chose m'échappe dans l'envoi de structure aux fonctions. Dans l'exmple ci-dessous j'essaie d'initialiser un tableau de structures qui contiennent des tableaux. Ben ça marche pô. Pourquoi?

Code : C
 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
#include <stdio.h>
#include <stdlib.h>
#include "EssaisStructure.h"
void initialiserPersonne (Personne *joueur);
int main()
{
    Personne joueur [2] ;
    int i;
    for (i=0; i<2;i++)
    {
        initialiserPersonne(&joueur[i]);
    }
    for (i=0;i<2;i++)
    {
        printf("Le joueur %d est %s %s\n", joueur [i].numero, joueur[i].prenom, joueur[i].nom);
    }
return 0;
}

void initialiserPersonne (Personne *joueur)
{
        *joueur->nom ="";
        *joueur->prenom = "";
        joueur->numero = 0;
}


et la structure

Code : C
1
2
3
4
5
6
7
typedef struct Personne Personne;
struct Personne
{
    char nom [100];
    char prenom [100];
    int numero;
};


La variable "numero" est bien remise à zéro mais pas les chaines nom et prénom. :colere2:
Hors ligne leolothlou # Posté le 23/11/2011 à 15:04:50
Avatar

Avis : Très bon

@ nioubiP :

Tout d'abord salut ! Par rapport au code, je pense que c'est dans ta fonction initialiserPersonne, tu metsCode : C
1
2
3
*joueur->nom ="";
                   *joueur->prenom = "";
                   joueur->numero = 0;
donc tu considère que joueur est un pointeur alors qu'en fait c'est une chaîne ! Tu devrais mettre : joueur[0] = 0; ou joueur [i] je sais pas trop ! Et donc changer le paramètre de initialiserPersonne en mettant joueur[] au lieu de *joueur ! C'est ce que je pense mais c'est surement faux, au moins j'aurai essayé de t'aider :) voilà moi non plus mon code ne marche pas donc sois patient ! :p
Hors ligne hastaris # Posté le 02/12/2011 à 14:35:13
Avatar

bonjour , j'ai un tres gros bug que je n'arrive pas a comprendre en fait :euh: , je pense que ma variable ne c'est pas enregistrée au bon endroit donc bon ... ça me renvoit si je veux envoyer un rapport d'erreur parce que mon programme a rencontré un probleme ... bon , on ne se moque pas , pliz :D

#include <stdio.h>
#include <stdlib.h>
#include "main.h"

int main(int argc, char *argv[])
{
int i=0 , a=0 ;
JOUEUR candidat[i];
printf("ce petit algorythme sert entre autre a savoir si vous pouriez etre pris(e) dans picsousBANQUE ^^\n\n\n\n combien de candidat etes vous ?");
scanf("%d" , candidat[i].nombreCANDIDAT );

for (i=0 ; i < candidat[i].nombreCANDIDAT ; i++ )
{
a++ ;
printf("JOUEUR%d" , a );
printf("\n\tPRENOM");
scanf("%s" , candidat[i].prenom );
printf("\n\tNOM");
scanf("%s" , candidat[i].nom );
printf("\n\tADESSE");
scanf("%s" , candidat[i].adresse );
printf("\n\tAGE");
scanf("%d" , candidat[i].age );
printf("\n\tCOMPTE EN BANQUE");
scanf("%lf" , candidat[i].compteENbanque );
}
return 0;
}



-----------------------------------------------------------------------------------------------


MAIN.H

typedef struct JOUEUR JOUEUR ;
struct JOUEUR
{
char nom[100];
char prenom[100];
char adresse[150];
int age ;
int garcon ;
double compteENbanque ;
int nombreCANDIDAT ;
};



merci beaucoup d'avance ... en plus ca m'arrive assez souvent ce bug-là !! :-°
MERCI !! :)



Qui ne tente rien n'a rien :p
 
Hors ligne YaZko # Posté le 23/12/2011 à 13:29:30

Avis : Bon

Peut-être (probablement?) cela a-t-il déjà été noté dans les commentaires précédents, mais une précision me semble manquer cruellement à la fin de ce paragraphe. Tu fais en effet remarquer qu'une structure peut contenir une autre structure, mais tu ne précises pas qu'elle peut également se contenir elle-même.
Je comprends bien que ce ne soit pas le lieu pour un cours sur les listes chaînées et/ou les arbres, mais ce point n'étant pas couvert dans ce cours, préciser au moins cette possibilité me semble nécessaire.

YaZko.
Hors ligne yeswecan1 # Posté le 22/01/2012 à 16:05:05

Avis : Très bon

Salut à tous,

j'ai un petit soucis actuellement dans la section "envoyer une structure à une fonction", je n'arrive pas à compiler le programme suivant, pourriez-vous m'aider à trouver l'erreur.
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
void initialiserCoordonnees(Coordonnees* point)
{
(*point).x = 0;
(*point).y = 0;
};

typedef struct Coordonnees Coordonnees;
struct Coordonnees
{
int x;
int y;
};

Coordonnees monPoint;
initialiserCoordonnees(& monPoint);

return 0;
}


Merci par avance de votre aide.
Hors ligne forsanta # Posté le 24/01/2012 à 00:08:03
Avatar

n
Hors ligne forsanta # Posté le 24/01/2012 à 18:27:47
Avatar

Citation : yeswecan1
Salut à tous,

j'ai un petit soucis actuellement dans la section "envoyer une structure à une fonction", je n'arrive pas à compiler le programme suivant, pourriez-vous m'aider à trouver l'erreur.
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
void initialiserCoordonnees(Coordonnees* point)
{
(*point).x = 0;
(*point).y = 0;
};

typedef struct Coordonnees Coordonnees;
struct Coordonnees
{
int x;
int y;
};

Coordonnees monPoint;
initialiserCoordonnees(& monPoint);

return 0;
}


Merci par avance de votre aide.



hello essai ca normalement sa devrais tourner
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Essai ceci :

#include <stdio.h>
#include <stdlib.h>
typedef struct Coordonnees Coordonnees;
struct Coordonnees
{
int x;
int y;
};

void initialiserCoordonnees(Coordonnees* point)
{
(*point).x = 0;
(*point).y = 0;
}

int main(int argc, char *argv[])
{
Coordonnees monPoint;
initialiserCoordonnees(& monPoint);
return 0;
}
Hors ligne patashop # Posté le 26/01/2012 à 14:12:48
Avatar

Salut à tous, j'essais une simple fonction du cours pour initialiser les coordonnées de monPoint !

Quand je mets la fonction dans main.c tout se passe bien mais quand je veux la mettre dans un autre fichier "fonctions1.c" ça plante à la compilation ça fait des heures que j'essaye de comprendre ce qui se passe ! help


Citation : main.c
#include <stdio.h>
#include <stdlib.h>
#include "main.h"

int main(int argc, char *argv[])
{

Coordonnees monPoint;

printf("Avant initialisation x vaut : %d ====== y vaut %d\n", monPoint.x, monPoint.y);
initialiserCoordonnees(&monPoint);
printf("Apres initialisation x vaut : %d ====== y vaut %d", monPoint.x, monPoint.y);


return 0;
}


Citation : main.h

#ifndef DEF_main
#define DEF_main

typedef struct Coordonnees Coordonnees;
struct Coordonnees
{
int x;
int y;
};

void initialiserCoordonnees();

#endif



Citation : fonctions1.c

initialiserCoordonnees(Coordonnees* point) // le compilateur me donne une erreur ici
{
point->x = 0 ;
point->y = 0 ;
}

Le compilateur donne error: expected ')' before '*' token
Hors ligne poupou9779 # Posté le 12/02/2012 à 09:33:00

@yeswecan1

Essaye plutôt ça :

Code : C
 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
#include <stdio.h>
#include <stdlib.h>

typedef struct Coordonnees Coordonnees;
struct Coordonnees
{
    int x;
    int y;
};

void initialiserCoordonnees(Coordonnees* point);


int main(int argc, char *argv[])
{
    Coordonnees monPoint;
    monPoint.x=1;
    monPoint.y=2;
    printf("X = %d, Y = %d\n",monPoint.x,monPoint.y);
    initialiserCoordonnees(&monPoint);
    printf("X = %d, Y = %d\n",monPoint.x,monPoint.y);
    system("PAUSE");
    return 0;
}

void initialiserCoordonnees(Coordonnees* point)
{
    point->x = 0;
    point->y = 0;
}


:) J'espère t'avoir aidé. :) Si t'as des questions, envoie-les moi en MP.

Poupou9779
Hors ligne tony33600 # Posté le 17/02/2012 à 14:13:46

Voila mon code il marche trés bien mais j'ai une question pourquoi suis-je obligé de mettre un & ligne 24 et 26 du main.c et pas sur les lignes précédentes.
je comprend que les autres variables sont des tableaux donc déjà des pointeurs mais le & ce rapporte a joueur qui lui est déjà un tableau.
et même sans s'occuper de ce que j'ai dit plus haut joueur est défini dans le main donc pourquoi avoir besoin de pointeurs?


ici mon main.h
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <string.h>
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED



struct Personne
{
    char nom [100];
    char prenom [100];
    char adresse [1000];
    int age;
    int sexe; //1 garcon 0 fille
};

typedef struct Personne Personne;
#endif // MAIN_H_INCLUDED

ici mon main.c
Code : C
 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
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"


int main()
{
    Personne joueur[2];
    int i = 0;



    for(i=0 ; i<2 ; i++)
    {
        printf("\t JOUEUR %d \n", i+1);
        printf("\n Quel est votre nom?\n");
        scanf("%s", joueur[i].nom);
        printf("\n Quel est votre prenom?\n");
        scanf("%s", joueur[i].prenom);
        printf("\n Quel est votre adresse?\n");
        scanf("%s", joueur[i].adresse);
        printf("\n Quel est votre age?\n");
        scanf("%d", &joueur[i].age);
        printf("\n Quel est votre sexe?\n 1 garcon\n 0 fille\n");
        scanf("%d", &joueur[i].sexe);
    }

     for(i=0 ; i<2 ; i++)
     {
         printf("\t\n JOUEUR %d \n", i+1);
         printf("\n nom: %s", joueur[i].nom);
         printf("\n prenom: %s", joueur[i].prenom);
         printf("\n adresse: %s", joueur[i].adresse);
         printf("\n age: %d", joueur[i].age);

         if (joueur[i].sexe == 1)
         {
             printf("\n sexe: garcon");
         }
         else if (joueur[i].sexe == 0)
         {
             printf("\n sexe: fille");
         }
         else
         {
             printf("\n sexe: inconnue");
         }
     }

    return 0;
}
Hors ligne Ghost_anon # Posté le 19/02/2012 à 18:49:01
Avatar

Avis : Très bon

salut tony!

je viens de finir le mien, et pour répondre à ta question,

en fait tu te réfère à tes variables "age" et "sexe" type int qui, elles , sont dans ta structure joueur : donc, si tu suis bien le truc, en fait, tu doit envoyer une valeur à l'adresse de ta variable qui est dans ta structure. :)

et comme tu dis , les autres , sont des déjà des pointeurs ! donc, pas besoin. :p

++
Hors ligne Omikron # Posté le 26/02/2012 à 10:25:06

Avis : Très bon

Deux petites questions à propos d'une partie de mon code source :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#define OUT Objet emplacement, Magie sort, Statut *joueur, adversaire
#define IN Objet emplacement[], Magie sort[], Statut *joueur, Statut *adversaire

static Clef EpeeDesBrumes_récupérée = NON;
    /*Les différentes clés sont à initialiser au début du chapitre
    (Ca nous évitera de se retrouver avec 100 clés inutiles dans la fonction main alors que les clés ne sont utiles que dans leur chapitre respectif).*/

void a0(Objet emplacement[], Magie sort[], Statut *joueur, Statut *adversaire)
{
    test(OUT);
}

void test(IN)
{
    combat(OUT);
}


(Les #defines se trouvent dans le main.c, pas dans le même fichier que le reste du code)

1) Est-ce que je peux utiliser les macros pour envoyer mes variables aux différentes fonctions ?
2) Est-ce que je peux faire une énumération static ?


En tout cas un grand bravo pour la réalisation de ce tuto purement génial :lol:
Hors ligne acccromaths # Posté le 01/03/2012 à 15:06:53

Là, je n'y comprend rien. Pour afficher nom et prénom, pas de problème. Mais avec le scanf age ... Mon programme cesse de fonctionner si je rentre un nombre (mais il veut bien une lettre - pas très utile)!!! :(

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"

int main()
{
    joueur joueur[1];
    printf("Nom : \n");
    scanf("%s",joueur[1].nom);
    printf("\nPrenom : \n");
    scanf("%s",joueur[1].prenom);
    printf("\nAge : \n");
    scanf("%d",&joueur[1].age);
    printf("\nTu t'appelle %s %s.",joueur[1].prenom,joueur[1].nom);
    return 0;
}


Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <string.h>
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED

typedef struct joueur joueur;
struct joueur
{
    char nom[100];
    char prenom[100];
    int age;
};

#endif // MAIN_H_INCLUDED
Hors ligne acccromaths # Posté le 01/03/2012 à 20:54:10

Je n'y comprend rien. Quand je fais :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
int main()
{
    joueur joueur[1]={"","",2};//ou une autre valeur ( j'en ai essayé plusieurs)
    printf("Nom : \n");
    scanf("%s",joueur[1].nom);
    printf("\nPrenom : \n");
    scanf("%s",joueur[1].prenom);
    printf("\nAge : \n");
    printf("\nTu t'appelle %s %s.Tu as %d ans.",joueur[1].prenom,joueur[1].nom,joueur[1].age);
    return 0;
}

Il me marque : "Tu as 32 ans.". Il refuse de changer la valeur de age. :colere2:
Si quelqu'un as la solution... :'(
Pour accéder à cette section
Connectez-vous !
connexion_rpx