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 :

Erreur dans mon code C


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par défaut Erreur dans mon code C
    Bonjour,

    j ai fait un petit programme en c (solutio de l exrcice:
    soit un fichier <<etudiant.dat>>contenantles noms,prenoms et les moyennes de tous les etudiant d une ecole donnee.
    ecrire un programme c qui contient une fonction qui recoiten parametres
    les nom et prenom dun etudiant et retoune sa moyenne

    la solution que j ai ecri
    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
    #include<stdio.h>
    #include<string.h>
    struct etud{char nom[10],pren[10];int moy;}e;
    int fet(char [],char []);
    main(){
     int m,i;
     FILE *p;  char nom[10],pre[10];
     /************** creation de fichier****************/
     p=fopen("etudiant.dat","w" );
     for(i=0;i<2;++i){
      printf("donnez le nom et le prenom et moyenne:\n");
      scanf("%s%s%d",e.nom,e.pren,&e.moy);
      fwrite(&e,sizeof(struct etud),1,p);}
     
     /***************recherche de l etudint*********************/
      printf("donnez le nom et le prenom de l etudiant a consulter :\n");
      scanf("%s%s",nom,pre); 
      m = fet(nom,pre); 
     printf(" la moyenne de %s %s est %d \n",nom,pre,m);
     /**************************************************************/
     getch();
     return 0;}
     /*************fonctin qui reteurne le moyenne***************/
     int fet(char n[10],char p[10])
     {  FILE *k;   
          k=fopen("etudiant.dat","r");
          while (fread(&e,sizeof(struct etud),1,k),!feof(k))
          if(e.nom==n&&e.pren==p) 
          return e.moy;}
    quand je l'execute il donne la moyenne =2008958736,
    si quelqu 'un a le temps de le lire et de me dire ce qui cloche ,ca serai vraiment simpa,merci d avance

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jskthebest Voir le message
    j ai fait un petit programme en c <...> quand je l'execute il donne la moyenne =2008958736,
    si quelqu 'un a le temps de le lire et de me dire ce qui cloche ,ca serai vraiment simpa,merci d avance
    Avant d'aller plus loin il faut corriger ces erreurs :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:5: warning: return type defaults to `int'
    main.c:5: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:21: warning: implicit declaration of function `getch'
    main.c: In function `fet':
    main.c:29: warning: control reaches end of non-void function
    main.c:29:21: warning: no newline at end of file
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 2 seconds)
    0 errors, 5 warnings
    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    J'aurais fait comme ça :
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    #include<stdio.h>
    #include<string.h>
     
    struct etud
    {
       char nom[10];
       char pren[10];
       int moy;
    };
     
    int lire_moyenne (char const *fname, char const *n, char const *p)
    {
       int moy = -1;
       FILE *k = fopen (fname, "r");
       if (k != NULL)
       {
          struct etud e;
          while (fread (&e, sizeof e, 1, k) == 1)
          {
             if (strcmp (e.nom, n) == 0 && strcmp (e.pren, p) == 0)
             {
                moy = e.moy;
                break;
             }
          }
          fclose (k);
       }
     
       return moy;
    }
     
    static void ajout (char const *fname)
    {
       FILE *p = fopen (fname, "a");
       if (p != NULL)
       {
          struct etud e;
          printf ("donnez le nom et le prenom et moyenne:\n");
          scanf ("%s%s%d", e.nom, e.pren, &e.moy);
          fwrite (&e, sizeof e, 1, p);
     
          fclose (p);
       }
    }
     
    static void consultation (char const *fname)
    {
       char nom[10], pre[10];
       int m;
       printf ("donnez le nom et le prenom de l etudiant a consulter :\n");
       scanf ("%s%s", nom, pre);
       m = lire_moyenne (fname, nom, pre);
       if (m != -1)
       {
          printf ("la moyenne de %s %s est %d\n", nom, pre, m);
       }
       else
       {
          printf ("%s %s est inconnu\n", nom, pre);
       }
    }
     
    int main (void)
    {
       int quitter = 0;
     
       while (!quitter)
       {
          static char const *fname = "etudiant.dat";
          int ch;
     
          printf ("1 - Ajouter un etudiant\n"
                  "2 - Consulter la moyenne\n" 
                  "3 - Quitter\n");
     
          scanf ("%d", &ch);
          getchar ();
          switch (ch)
          {
          case 1:
             ajout (fname);
             break;
          case 2:
             consultation (fname);
             break;
          case 3:
             quitter = 1;
             break;
          }
       }
       return 0;
    }

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Une fois corrigés les erreurs et avertissements du compilateur, tu pourras soigner ton indentation (Ces } en fin de ligne !)

    Ensuite, tu pourras corriger tes erreurs, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int fet(char n[10],char p[10])
     {  ...
          if(e.nom==n&&e.pren==p) 
          return e.moy;}
    - le if compare les adresses des chaînes pas les chaînes (voir strcmp)
    - si l'étudiant n'est au final pas trouvé, la fonction ne renvoie rien or elle doit retourner un int (c'est ce qui se produit et amène cette réponse absurde moyenne =2008958736)

Discussions similaires

  1. Où l'erreur dans mon code
    Par moonia dans le forum Langage
    Réponses: 3
    Dernier message: 21/06/2006, 14h16
  2. Réponses: 5
    Dernier message: 14/05/2006, 22h41
  3. Erreur dans mon code PHP
    Par jack_1981 dans le forum Langage
    Réponses: 6
    Dernier message: 12/05/2006, 10h01
  4. erreur dans mon code
    Par sacco dans le forum C
    Réponses: 4
    Dernier message: 14/04/2006, 11h50
  5. [VBA][Débutant][export]erreurs dans mon code?
    Par Christophe93250 dans le forum Access
    Réponses: 4
    Dernier message: 06/01/2006, 19h52

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