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 :

exercice de structure


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut exercice de structure
    salut camarades;

    j'ai un exercice qui consiste a creer une structure comportant le matricule ,le nom et le salaire d'un employé;ce petit programme permet d'ajouter autant d'employe sans étre obligé de donner leurs nombre au début. et retourne a la fin le nombre d'employé entrer par l'utilisateur;

    voici le code dont jé rencontré 1 probléme:leprogramme saute l'étape pour entrer le nom de l'employé+ ne retourne pas leurs nombres(employés) a la fin;merci
    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
    #include<stdio.h>
    #include<conio.h>
     
    struct employe
    {int mat;
    char nom[20];
    int sal;};
     
    main()
    {
      struct employe E[100];
      int n,i=0;
      do
      {
      printf("voulez vous ajouter un employe ? entrer (0/1) avec 0=non et 1=oui:");
      scanf("%d",&n);
      if(n==0)  break;
     
     
      printf("entrer le marticule :");
      scanf("%d",&E[i].mat);
      printf("entrer le nom de l'employe:");
      gets(E[i].nom);
      printf("entrer le salaire de l'employe:");
      scanf("%d",&E[i].sal);
      i++;
      }
      while(n==1);
      return i;
    }

  2. #2
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Je ne conseille pas d'utiliser gets, comme tu as commencé avec scanf, tu peux encore l'utiliser :
    Ensuite le break dans le while à éviter!!!

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    Citation Envoyé par juve1897 Voir le message
    Je ne conseille pas d'utiliser gets, comme tu as commencé avec scanf, tu peux encore l'utiliser :
    Ensuite le break dans le while à éviter!!!

    merci juve pour ta réponce;
    mais je vois pas quel est le probléme pour gets;parcontre je l'ai utilisé dans d'autre prorammeg é ça a bien marché.

  4. #4
    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 juve1897 Voir le message
    Je ne conseille pas d'utiliser gets, comme tu as commencé avec scanf, tu peux encore l'utiliser :
    Et en quoi c'est mieux ? De plus, on ne peux plus entrer plusieurs mots...

  5. #5
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Salut,
    Il faut d'abord vider le buffer sinon ton gets lira toujours la touche entrée utilisée pour valider le premier scanf ( gets n'est pas à conseiller ) ...pour plus de détails ( vider le buffer proprement + lecture sécurisée avec fgets ) je te conseil de lire la FAQ

    petite remarque le #include<conio.h> est inutile pour ce bout de code ...

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Il ne faut jamais utiliser gets, ni même scanf si on la maîtrise pas, préférez fgets
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    j'ai remplacé le gets par un scanf;ça a bien marché .mais j'ai encore deux problémes:

    -le programme ne retourne pas le ombre des employé a la fin?

    -je suis pas encore convaincu de l'inefficacité de gets.je veux avoir le gets dans mon programme.

  8. #8
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    -je suis pas encore convaincu de l'inefficacité de gets.je veux avoir le gets dans mon programme.
    FAQ C
    La fonction gets() ne permet pas de spécifier la taille de la chaîne réservée à la lecture, ce qui peut entraîner de graves problèmes si la saisie est plus longue que la taille réservée.
    Si quelqu'un a un nom de plus de 20 caracteres il y aura un problème, c'est pas suffisant comme raison ?

  9. #9
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    -le programme ne retourne pas le ombre des employé a la fin?

    ben ... si mais ça ne veut rien dire ! tel quel le return de main() est utilisé pour renvoyer un code d'erreur (ou 0 si tout va bien) à l'appelant du programme (c'est-à-dire ton système). Il n'affiche rien du tout.

    Pourquoi ne pas simplement afficher i à la fin ?

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2007
    Messages : 69
    Par défaut
    ok;tout marche bien maintenat.merci bien

  11. #11
    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 space-cowboy Voir le message
    -je suis pas encore convaincu de l'inefficacité de gets.je veux avoir le gets dans mon programme.
    gets() ne permet pas de limiter le nombre de caractères saisies. Je conseille d'utiliser uniquement fgets() pour les saisies suivi de fclean() (fonction 'maison' dont le code se trouve sur ce forum en cherchant un peu[1]) et de la fonction de conversion qui va bien si nécdessaire (sscanf(), strtol() etc.).


    ------------------------
    [1] Comme c'est le début de l'année, je la republie :

    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
     
    #include "fclean.h"
     
    #include <stdio.h>
    #include <string.h>
     
    int fclean (char *s_buffer, FILE * stream)
    {
       int err = 0;
       if (s_buffer != NULL && stream != NULL)
       {
          char *pc = strchr (s_buffer, '\n');
     
          if (pc != NULL)           /* La saisie n'a pas ete tronquee */
          {
             /* On remplace '\n' par le caractere nul '\0' */
             *pc = 0;
          }
          else
          {
             /* La saisie a ete tronquee, on purge le flux d'entree */
             int c;
             while ((c = fgetc (stream)) != '\n' && c != EOF)
             {
             }
             err = 1;
          }
       }
       return err;
    }
    Pose des questions si tu ne comprends pas.

    A toi de la mettre dans un fichier séparé que tu ajoutes à ton projet selon les besoins. Je te laisse écrire le header...

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

Discussions similaires

  1. exercice variable structure
    Par program1 dans le forum C
    Réponses: 3
    Dernier message: 11/06/2014, 09h53
  2. Exercice sur les structures
    Par Robmilou dans le forum Débuter
    Réponses: 2
    Dernier message: 19/05/2008, 01h57
  3. aide pour exercice sur les structures
    Par demetria dans le forum C
    Réponses: 10
    Dernier message: 25/09/2007, 22h11

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