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 :

fonction et structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2022
    Messages : 8
    Par défaut fonction et structure
    Bonjour
    quand j'essaye de compiler ce programme , j'ai un message d'erreur à la ligne 45. Pouvez-vous m'aider?
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #include<stdio.h>
    // EXERCICE 1
    //1)
    #define NP 20
    //2
    struct POINT
    {
        char P;
        float x;
        float y;
    };
    //3
    struct POINT COURBE[NP];
    //4
    void AFFICHERPOINT( struct POINT );
    void AFFICHERPOINT( struct POINT T )
    {
        printf ("%s\t%f\t%f\t\n",T.P,T.x,T.y);
     
    }
    int main()
    {
        int k, n;
        printf("Donnez le nombre de points: ");
        scanf ("%d",&n);
        printf("\n");
            for (k=1;k<=n;k++)
            {
              printf ("point:%d",k);
     
              struct POINT SAISIEPOINT(void)
     
                {struct POINT Q;
                  printf("P:");
                  scanf("%s",&Q.P);
                  print("\n");
                  printf("x:");
                  scanf("%f",&Q.x);
                  print("\n");
                  printf("y:");
                  scanf("%f",&Q.y);
                  print("\n");
                  return Q;
                };
                 COURBE[k] = SAISIEPRODUIT();
             };
     
            printf ("P\t x\t y\t");
            for (k=1 ; k<=n; k++);
            {
                AFFICHERPOINT(COURBE[k]);
                printf("\n");
            };
            return 0;
    }

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Où est la fonction SAISIEPRODUIT(); ?

    Et pour information on n’écrit pas les fonctions en majuscule 😉.

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 746
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 746
    Par défaut
    Où as-tu appris à coder en C ?

    On ne code pas 1 fonction dans 1 boucle

    Et en passant en paramètre des structures, on fait 1 copie.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    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 801
    Billets dans le blog
    1
    Par défaut
    Bonjour

    C'est quoi ce programme ??? Alors (liste non exhaustive)
    • définition de fonctions dans le code (remarque, en réalité ce n'est pas interdit depuis qu'on est passé en C99 dans lequel on peut définir des fonctions dans des fonctions mais ça reste quand-même bien débile => le programme, à chaque tour de boucle, il va devoir recréer la fonction pour pouvoir l'utiliser !!!)
    • saisie et affichage de char via "%s"
    • indices d'un tableau de n éléments variant de 1 à n

    Me semble que c'est à peu près tout... enfin sans compter les détails comme l'utilisation de variables globales sans raison, ton aération totalement inexistante, ton passage de structure par valeurs (pour info la pile est limitée!!! là ça va que la structure fait 9 octets mais rajoute-lui un tab[5000000] et ton truc explose en vol!!!) et tes noms tout en majuscules. Donc commence par ouvrir un livre de C avant de vouloir faire du C...

    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
    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>
    #define NP			(20)
     
    typedef struct s_point {
    	char n;
    	float x;
    	float y;
    } t_point;
     
    void point_affich(const t_point* const);
    void point_saisie(t_point* const);
     
    int main() {
    	t_point points[NP];
    	printf("Donnez le nombre de points (pas plus de %u): ", NP); fflush(stdout);
    	size_t n;
    	scanf("%lu", &n); getchar();
    	// Ici faudrait tester n <= NP mais bon, je vais pas non plus tout te faire !!!
     
    	size_t i;
    	t_point* pt;
    	for (i=0, pt=points; i < n; i++, pt++) point_saisie(pt);
    	for (i=0, pt=points; i < n; i++, pt++) {
    		printf("Point %lu/%lu: ", i+1, n);
    		point_affich(pt);
    	}
    	return 0;
    }
     
    void point_saisie(t_point* const p) {
    	fputs("Entrez p: ", stdout); fflush(stdout);
    	scanf("%c", &p->n); getchar();
     
    	fputs("Entrez x: ", stdout); fflush(stdout);
    	scanf("%f", &p->x); getchar();
     
    	fputs("Entrez y: ", stdout); fflush(stdout);
    	scanf("%f", &p->y); getchar();
    }
     
    void point_affich(const t_point* const p) {
    	printf("n=[%c], x=%f, y=%f\n", p->n, p->x, p->y);
    }

    Ce n'est pas un peu plus élégant ? Ou juste plus lisible ?? Ou seulement juste compilable ???

    PS: le getchar() qui suit chaque scanf() c'est pour supprimer le <return> résiduel. C'est pas la solution la plus efficace ou la plus robuste mais c'est la plus simple à mettre en oeuvre pour pouvoir voir son code tourner.
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    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 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mak09 Voir le message
    Merci beaucoup pour la réponse. pour le codage de la fonction dans la boucle c'était une erreur de ma part à cause de la précipitation.
    Trop de précipitation sont rarement une bonne idée. Et t'es pas obligé de réécrire tes posts à chacun d'entre nous, on se lit tous les uns les autres.

    Citation Envoyé par mak09 Voir le message
    Je ne pourrais pas changer les majuscules vu que c'est les consignes de l'énoncé
    Bon. Je sens là des consignes venues d'un prof de C n'ayant jamais fait de C... ou n'ayant jamais été prof... ou n'ayant jamais été ni l'un ni l'autre... Enfin c'est peu important vu que mon code n'a que 2 fonctions, c'est facile à changer. Etonnant qu'il n'ait pas dit aussi d'écrire main() en majuscules...

    Citation Envoyé par mak09 Voir le message
    Et pour mon apprentissage, c'était en classe avec des méthodes dite "simple" par notre prof.
    Ah voilà, un prof avec des méthodes "simple", tout s'explique...
    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]

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 160
    Par défaut
    Il n'est pas interdit d'écrire les noms de fonctions en C. Par contre c'est effectivement une mauvaise pratique et ça ne fait pas partie des conventions.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 753
    Par défaut
    Citation Envoyé par mak09 Voir le message
    (....) Je ne pourrais pas changer les majuscules vu que c'est les consignes de l'énoncé (....)
    Si on veut des majuscules, on peut écrire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #define MAIN main
    #define INT int
    #define CHAR char
    #define RETURN return
     
    INT MAIN(INT ARGC, CHAR *ARGV[]) {
    	RETURN 0;
    }


    Edit mais qu'est-ce que c'est c.. (au choix, on ou ul)

  8. #8
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2022
    Messages : 8
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Bonjour.

    Où est la fonction SAISIEPRODUIT(); ?

    Et pour information on n’écrit pas les fonctions en majuscule 😉.
    Bonsoir.
    Merci beaucoup pour la reponse, pour la fonction SAISIEPRODUIT(), c'était une erreur de ma part. Mais pour l'utilisation des majuscules, c'est écrit comme tel dans l'énoncé.

    Citation Envoyé par foetus Voir le message
    Où as-tu appris à coder en C ?

    On ne code pas 1 fonction dans 1 boucle

    Et en passant en paramètre des structures, on fait 1 copie.
    Bonsoir .
    Merci beaucoup pour la réponse. pour le codage de la fonction c'était une erreur de ma part à cause de la précipitation.
    Et pour mon apprentissage, c'était en classe avec des méthodes dite "simple" par notre prof.

    Citation Envoyé par Sve@r Voir le message
    Bonjour

    C'est quoi ce programme ??? Alors (liste non exhaustive)
    • définition de fonctions dans le code (remarque, en réalité ce n'est pas interdit depuis qu'on est passé en C99 dans lequel on peut définir des fonctions dans des fonctions mais ça reste quand-même bien débile => le programme, à chaque tour de boucle, il va devoir recréer la fonction pour pouvoir l'utiliser !!!)
    • saisie et affichage de char via "%s"
    • indices d'un tableau de n éléments variant de 1 à n

    Me semble que c'est à peu près tout... enfin sans compter les détails comme l'utilisation de variables globales sans raison, ton aération totalement inexistante, ton passage de structure par valeurs (pour info la pile est limitée!!! là ça va que la structure fait 9 octets mais rajoute-lui un tab[5000000] et ton truc explose en vol!!!) et tes noms tout en majuscules. Donc commence par ouvrir un livre de C avant de vouloir faire du C...

    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
    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>
    #define NP			(20)
     
    typedef struct s_point {
    	char n;
    	float x;
    	float y;
    } t_point;
     
    void point_affich(const t_point* const);
    void point_saisie(t_point* const);
     
    int main() {
    	t_point points[NP];
    	printf("Donnez le nombre de points (pas plus de %u): ", NP); fflush(stdout);
    	size_t n;
    	scanf("%lu", &n); getchar();
    	// Ici faudrait tester n <= NP mais bon, je vais pas non plus tout te faire !!!
     
    	size_t i;
    	t_point* pt;
    	for (i=0, pt=points; i < n; i++, pt++) point_saisie(pt);
    	for (i=0, pt=points; i < n; i++, pt++) {
    		printf("Point %lu/%lu: ", i+1, n);
    		point_affich(pt);
    	}
    	return 0;
    }
     
    void point_saisie(t_point* const p) {
    	fputs("Entrez p: ", stdout); fflush(stdout);
    	scanf("%c", &p->n); getchar();
     
    	fputs("Entrez x: ", stdout); fflush(stdout);
    	scanf("%f", &p->x); getchar();
     
    	fputs("Entrez y: ", stdout); fflush(stdout);
    	scanf("%f", &p->y); getchar();
    }
     
    void point_affich(const t_point* const p) {
    	printf("n=[%c], x=%f, y=%f\n", p->n, p->x, p->y);
    }

    Ce n'est pas un peu plus élégant ? Ou juste plus lisible ?? Ou seulement juste compilable ???

    PS: le getchar() qui suit chaque scanf() c'est pour supprimer le <return> résiduel. C'est pas la solution la plus efficace ou la plus robuste mais c'est la plus simple à mettre en oeuvre pour pouvoir voir son code tourner.

    Bonsoir .
    Merci beaucoup pour la réponse. pour le codage de la fonction dans la boucle c'était une erreur de ma part à cause de la précipitation.
    Je ne pourrais pas changer les majuscules vu que c'est les consignes de l'énoncé mais je promet de faire beaucoup plus d'effort pour pouvoir ecrire des programme appréciable .
    Merci pour les conseils et les explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passer par adresse dans une fonction une structure
    Par bru.antoine dans le forum C
    Réponses: 1
    Dernier message: 18/06/2012, 14h47
  2. Réponses: 2
    Dernier message: 19/08/2010, 16h20
  3. Réponses: 5
    Dernier message: 27/07/2010, 14h06
  4. Déclaration de pointeur de fonction et structure
    Par ShaiLeTroll dans le forum Delphi
    Réponses: 28
    Dernier message: 05/04/2007, 10h48
  5. Pointeur de fonction et structure
    Par Trunks dans le forum C
    Réponses: 6
    Dernier message: 07/10/2005, 00h32

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