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 :

3 [Warning] lors de la compilation d'un programme


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    utilisateur
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : utilisateur

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par défaut 3 [Warning] lors de la compilation d'un programme
    salut,
    lors de la compilation de mon programme j'ai obtient les erreurs suivants :
    (4 C:\Users\makrem\Desktop\SansNom1.c [Warning] "struct etudiant" declared inside parameter list )
    (4 C:\Users\makrem\Desktop\SansNom1.c [Warning] its scope is only this definition or declaration, which is probably not what you want )
    (5 C:\Users\makrem\Desktop\SansNom1.c [Warning] "struct etudiant" declared inside parameter list )
    je veux comprendre mes erreurs et les corriger
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #include<stdio.h>
    #include<stdlib.h>
    void saisir( struct etudiant * tab , int n );
    int calcul_moyg(struct  etudiant *tab ,int n1, int n );
    typedef struct
    {   
        char mat[10] ;
        char nom[20];
        char prenom[20];
        float *tmoy;
        float  moyg;
    }etudiant;
     
    int main()
    { int n,n1;
    int i,j;
     
    etudiant *tab ;
    /*****************************************/
    printf("entrer le nombre d'etudiant: ");
    scanf("%d",&n);
    tab=(etudiant*)malloc(n*sizeof(etudiant));
    saisir(tab,n);
    calcul_moyg(tab,n1,n); 
    return(0);
    }
    /******************************************************************************/
    void saisir(  etudiant * tab , int n )
    { int i,j ;
    int n1 ;
    float s;
    for(i=0;i<n;i++)
     {    
     printf("\nentrer la matricule de l etudiant: \t");
     scanf("%s",tab[i].mat);
     printf("Entrer le nom de l etudiant: \t ");
     scanf("%s",(tab+i)->nom);
     printf("entrer la prenom de l etudiant: \t" );
     scanf("%s",(tab+i)->prenom);
     printf("entrer le nombre de matiere de %s:\t",(tab+i)->prenom);
     scanf("%d",&n1);
     tab->tmoy=(float*)malloc(n1*sizeof(float));
     for(j=0;j<n1;j++)
     {printf(" note matiere n°%d =\t",j);
       scanf("%f",(tab+i)->tmoy+j);
     }
    }}
    /******************************************************************************/
    int calcul_moyg( etudiant *tab ,int n1, int n)
    { float s=0;
         int i,j;
     for(i=0;i<n;i++)    
     for(j=0;j<n1;j++)
     s+=*(tab+i)->tmoy+j ;
     (tab+i)->moyg = s/n1 ;
     printf("le moy generale est: %f",(tab+i)->moyg);    
     return (0);    
    }

  2. #2
    Membre actif Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Par défaut
    Je suis pas adepte du SM mais mes yeux l'ont senti :'(

    En fait ça marche mieux si tu utilises le nom que tu as attribuer à ta structure

    Prochaines fois rends ton code plus lisible avant de le poster

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct  s_etudiant
    {
      char          mat[10] ;
      char          nom[20];
      char          prenom[20];
      float         *tmoy;
      float         moyg;
    }               etudiant;
     
    // LE PROBLEME ETAIT JUSTE EN DESSOUS
    void saisir(etudiant *tab , int n );
    int calcul_moyg(etudiant *tab , int n1, int n );
     
    int     main()
    {
      int n, n1, i, j;
      etudiant *tab;
     
      printf("entrer le nombre d'etudiant: ");
      scanf("%d",&n);
      tab = malloc(n * sizeof(etudiant));
      saisir(tab, n);
      calcul_moyg(tab, n1, n);
      return(0);
    }
     
    void    saisir(etudiant *tab, int n)
    {
      int n1, i, j;
      float s;
     
      for(i=0; i<n; i++)
        {
          printf("\nentrer la matricule de l etudiant: \t");
          scanf("%s", tab[i].mat);
          printf("Entrer le nom de l etudiant: \t ");
          scanf("%s", (tab+i)->nom);
          printf("entrer la prenom de l etudiant: \t" );
          scanf("%s", (tab+i)->prenom);
          printf("entrer le nombre de matiere de %s:\t",(tab+i)->prenom);
          scanf("%d", &n1);
          tab->tmoy = malloc(n1 * sizeof(float));
          for(j=0; j<n1; j++)
            {
              printf(" note matiere n°%d =\t", j);
              scanf("%f", (tab+i)->tmoy+j);
            }
        }
    }
     
    int     calcul_moyg(etudiant *tab ,int n1, int n)
    {
      float s = 0;
      int i, j;
     
      for(i=0; i<n; i++)
        for(j=0; j<n1; j++)
          s += *(tab+i)->tmoy+j;
      (tab+i)->moyg = s / n1;
      printf("la moy generale est: %f", (tab+i)->moyg);
      return (0);
    }

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

    Si tu fais un typedef struct{/*...*/}etudiant;, ne mets pas struct etudiant, mais juste etudiant.
    Et comme te l'a montré Waether, les deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void saisir(etudiant * tab , int n );
    int calcul_moyg(etudiant *tab ,int n1, int n );
    étaient à déplacer après la définition de cette structure, afin que le compilateur la connaisse à ce moment-là.

    Ceci réparé, on peut aussi voir ces avertissements :
    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
    main.c: In function 'main':
    main.c:18:7: warning: unused variable 'j' [-Wunused-variable]
     int i,j;
           ^
    main.c:18:5: warning: unused variable 'i' [-Wunused-variable]
     int i,j;
         ^
    main.c: In function 'saisir':
    main.c:33:7: warning: unused variable 's' [-Wunused-variable]
     float s;
           ^
    main.c: In function 'main':
    main.c:26:1: warning: 'n1' is used uninitialized in this function [-Wuninitialized]
     calcul_moyg(tab,n1,n);
     ^
    Notamment le dernier.

    À noter aussi les lignes scanf("%s", ...); qui ne sont pas sécurisées, et n'acceptent pas les noms comportant des espaces. Tu peux consulter ce message.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    En fait, plus que "après la définition de la structure", c'est "avant leurs appels", c'est à dire avant main().

    Ce qui aurait été fait si tu avais défini un en-tête déclarant la structure et les fonctions attenantes.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2009, 10h56
  2. warning lors de la compilation
    Par salseropom dans le forum C
    Réponses: 6
    Dernier message: 04/12/2006, 10h46
  3. JDBC warning lors de la compilation
    Par kichemans dans le forum JDBC
    Réponses: 5
    Dernier message: 27/12/2005, 15h40
  4. Warnings lors de la compilation
    Par polo54 dans le forum C
    Réponses: 5
    Dernier message: 07/02/2003, 09h12

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