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 :

Mon code est correct , mais j'aurais peut être d'autres questions [Débutant(e)]


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Mon code est correct , mais j'aurais peut être d'autres questions
    mon problème est résolut

  2. #2
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Points : 292
    Points
    292
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char a : représente une seule variable
    char a[10] : représente un tableau de 10 caractères
    a[0] : premier caractère et a[9] est le dernier.
    Bon courage.

  3. #3
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Vos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf ("%c", &poubelle);
    destinés à récupérer les retours chariots qui traînent après la lecture d'un entier ne sont pas au bon endroit, il faut les placer après les
    Ainsi:
    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
      ...
      printf ("Entrez le nom de l'organisme : ");
      scanf ("%c", &a);
      printf ("Entrez sa taille (en Kbp) : ");
      scanf ("%d", &i);
      scanf ("%c", &poubelle);
      printf ("Entrez le nom de l'organisme : ");
      scanf ("%c", &b);
      printf ("Entrez sa taille (en Kbp) : ");
      scanf ("%d", &j);
      scanf ("%c", &poubelle);
      printf ("Entrez le nom de l'organisme : ");
      scanf ("%c", &c);
      printf ("Entrez sa taille (en Kbp) : ");
      scanf ("%d", &k);
      ...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Mauvaise utilisation de scanf.
    Le sujet est maintes et maintes fois traité dans ce forum.

    Tu trouveras des explications dans les topics suivants.
    http://www.developpez.net/forums/sho...ighlight=scanf
    http://www.developpez.net/forums/sho...ighlight=scanf

    Si tu veux entrer des noms, effectivement, un char ne sera pas suffisant à moins que le nom des organismes ne comporte qu'une seule lettre.

  5. #5
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Ensuite, si le nom peut contenir plus d'une lettre, il faut utiliser des tableaux de char et une fonction du type fgets() ou scanf().

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    quand j'utilise fgets j'ai ce message

    passing argument 2 of "fgets" makes integer from pointer without a cast

    J'ai vu que d'autre ont eu ce problème , mais je ne sais pas comment résoudre ça ... il me faudrait une explication détaillée , je pense

    merci

  7. #7
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par K&R2
    char *fgets(char *s, int n, FILE *stream)
    fgets reads at most the next n-1 characters into the array s, stopping if a newline is encountered; the newline is included in the array, which is terminated by '\0'. fgets returns s, or NULL if end of file or error occurs.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char s[10];
    ...
    fgets(s,sizeof s,stdin);
    ...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    je connait bien fgets
    mais je n'ai encore jamais réussis à l'utiliser
    j'ai toujours

    passing argument 2 of "fgets" makes integer from pointer without a cast

  9. #9
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Postez votre code s'il vous plaît.

  10. #10
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Bonjour,

    fait nous voir comment tu essaye de l'appeler on aura peut etre la reponse
    "vaste programme"

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    ben voilà où j'en suis pour le moment

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void)
     
    {
     
      char poubelle;
     
      char a[10];
      char b[10];
      char c[10];
      int i;
      int j;
      int k;
      i = 0;
      j = 0;
      k = 0;
      printf ("Entrez le nom de l'organisme : ");
      fgets (&a[0], 9, stdin);  
      printf ("Entrez sa taille (en Kbp) : ");
      scanf ("%d", &i);
      scanf ("%s", &poubelle);
      printf ("Entrez le nom de l'organisme : ");
      fgets (&a[0], 9, stdin); 
      printf ("Entrez sa taille (en Kbp) : ");
      scanf ("%d", &j);
      scanf ("%s", &poubelle);
      printf ("Entrez le nom de l'organisme : ");
      fgets (&a[0], 9, stdin);
      printf ("Entrez sa taille (en Kbp) : ");
      scanf ("%d", &k);
      scanf ("%s", &poubelle);
     
      if (i<j && j<k) 
      {              
        printf ("\nGenome max : %c\n", c[0]);
        printf ("Genome min : %c\n", a[0]);
        printf ("Genome med : %c\n", b[0]);
      }
      else if (i<j && k<j)
      {
        printf ("\nGenome max : %c\n", b[10]);
        printf ("Genome min : %c\n", a[10]);
        printf ("Genome med : %c\n", c[10]);
      }
      else if (j<k && k<i)
      {
        printf ("\nGenome max : %c\n", a[10]);
        printf ("Genome min : %c\n", b[10]);
        printf ("Genome med : %c\n", c[10]);
      }
      else if (j<k && i<k)
      {
        printf ("\nGenome max : %c\n", c[10]);
        printf ("Genome min : %c\n", b[10]);
        printf ("Genome med : %c\n", a[10]);
      }
      else if (k<j && j<i)
      {
        printf ("\nGenome max : %c\n", a[10]);
        printf ("Genome min : %c\n", c[10]);
        printf ("Genome med : %c\n", b[10]);
      }
      else if (k<j && i<j)
      {
        printf ("\nGenome max : %c\n", b[10]);
        printf ("Genome min : %c\n", c[10]);
        printf ("Genome med : %c\n", a[10]);
      }
     
     
      return 0;
    }

  12. #12
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    comme codé sur les thread referencés par les liens cité plus haut

    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
     
    /* utilisation de fgets */
            char buffer[15] = "";
            if (fgets(buffer, sizeof buffer, stdin) != NULL)
            {
                fclean(buffer, stdin);
                n = strtol(buffer, &p_end, 0);
            }
     
     
    /* Elimine le caractere de fin de ligne terminant la saisie et vide le tampon
       du flux d'entree stream si necessaire */
    static void fclean(char *buffer, FILE *stream)
    {
        char *pc = strchr(buffer, '\n');
     
        if (pc != NULL)
        { /* Le caractere de fin de ligne a ete trouve. La saisie est complete */
     
            *pc = 0;
        }
        else
        { /* La saisie a ete tronquee. On vide le tampon du flux stream */
     
            /* Important: la fonction fgetc(stream) retourne un entier de type int,
               pas de type char. */
            int c;
     
            while ((c = fgetc(stream)) != '\n' && c != EOF)
            {
                /* On ignore les caractere presents dans le tampon */
            }
        }
    }
    (code de tierry chappuis, pris sur un des thread susmentionné)
    pour le reste visite les thread, tout est dis dedans.
    "vaste programme"

  13. #13
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Voici ton programme (un peu) remanié...

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    /* -tc- determine le nombre d'elements que contient un tableau statique */
    #define NB_ELEMS(a) ( sizeof (a) / sizeof *(a) )
     
    /* -tc- Une structure Organisme pour faire les choses proprement */
    struct Organisme
    {
        char nom[10];
        int taille;
    };
     
    /* -tc- fonction essentielle pour bien utiliser fgets() */
    static void fclean(char *buffer, FILE *stream);
    /* -tc- predicat a utiliser avec qsort() */
    static int comparer(void const *o1, void const *o2);
     
    int main (void)
    {
        /* -tc- tampon utilise lors de la saisie d'un entier */
        char tampon[15] = "";
        struct Organisme organismes[3] = {{"", 0}};
        size_t i;
     
        for (i = 0; i < NB_ELEMS(organismes); ++i)
        {
            char *pend = NULL;
     
            printf ("Entrez le nom de l'organisme : ");
            /* -tc- necessaire pour forcer l'affichage de l'invite */
            fflush(stdout);
            fgets(organismes[i].nom, sizeof organismes[i].nom, stdin);
            fclean(organismes[i].nom, stdin);
     
            /* -tc- Saisie securisee d'un entier */
            do
            {
                printf ("Entrez sa taille (en Kbp) : ");
                fflush(stdout);
                fgets(tampon, sizeof tampon, stdin);
                fclean(tampon, stdin);
                organismes[i].taille = strtol(tampon, &pend, 0);
            }
            while (*pend != 0);
        }
     
        /* -tc- On trie le tableau organismes */
        qsort(organismes, NB_ELEMS(organismes), sizeof *organismes, comparer);
     
        /*-tc- Le tableau etant trie, il est facile de determiner max, min, et med */
        printf("Genome max: %s\n", organismes[NB_ELEMS(organismes) - 1].nom);
        printf("Genome min: %s\n", organismes[0].nom);
        printf("Genome med: %s\n", organismes[NB_ELEMS(organismes) / 2].nom);
     
        return EXIT_SUCCESS;
    }
     
    /* -tc- Predicat permettant de comparer deux organismes */
    static int comparer(void const *o1, void const *o2)
    {
        struct Organisme const *org1 = (struct Organisme const *) o1;
        struct Organisme const *org2 = (struct Organisme const *) o2;
     
        return org1->taille - org2->taille;
    }
     
    /* -tc- Elimine le caractere de fin de ligne terminant la saisie et vide le tampon
       du flux d'entree stream si necessaire */
    static void fclean(char *buffer, FILE *stream)
    {
        char *pc = strchr(buffer, '\n');
     
        if (pc != NULL)
        { /* -tc- Le caractere de fin de ligne a ete trouve. La saisie est complete */
     
            *pc = 0;
        }
        else
        { /* -tc- La saisie a ete tronquee. On vide le tampon du flux stream */
     
            /* -tc- Important: la fonction fgetc(stream) retourne un entier de type int,
               pas de type char. */
            int c;
     
            while ((c = fgetc(stream)) != '\n' && c != EOF)
            {
                /* -tc- On ignore les caractere presents dans le tampon */
            }
        }
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut (en se prosternant) fantastique , thierry !
    un peu (beaucoup) remanié tout de même
    je vais faire de mon mieu pour tout comprendre

  15. #15
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par incal Voir le message
    un peu (beaucoup) remanié tout de même
    je vais faire de mon mieu pour tout comprendre
    Pas tant remanié que ça, à part l'introduction d'une structure Organisme pour encapsuler le nom et la taille dans une seule entité. Sinon, les répétitions de code on été remplacées par des boucles (si tu n'as que 3 organismes, ce n'est pas un problème de tout taper à la main, mais si le nombre d'organismes augmente... Les boucles et les tableaux sont faits pour ça!).

    Le tri d'un tableau est une excellente manière d'obtenir le max, min et med d'un ensemble de valeurs. La fonction qsort() (déclarée dans le fichier d'en-tête standard stdlib.h) rend cette tâche beaucoup moins fastidieuse que la technique "a la mano" que tu as utilisée.

    Pour le reste, je n'utilise jamais scanf() (ou presque jamais). C'est une fonction plus complexe que ne le laissent penser beaucoup de prof. ou livres d'introduction. Pour en maîtriser toutes les finesses, je recommande la lecture suivante qui est très instructive: http://xrenault.developpez.com/tutoriels/c/scanf/. Toutefois, lorsque tu auras pris l'habitude du travail en équipe, tu te rendras vite compte que si tu as su prendre le temps de devenir un gourou dans l'utilisation de scanf(), il y a 9 chances sur 10 que les programmeurs qui seront chargés de la maintenance n'afficherons, pour leur part, pas une telle maîtrise. EN conclusion, utilise fgets() et fclean() (voir détails dans les archives du forum) autant que possible et, si besoin, convertir le texte saisi avec strtol(), strtoul(), strtod() ou même sscanf().

    N'hésite pas à poser des questions si tu ne comprends pas.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Je pense en comprendre une grande partie .

    Pour l'instant je me demande si le tampon utilisé lors de la saisie d'un entier doit nécéssairement être plus grand que le nombre entre crochets , au début dans "char nom[10]" ?
    (il me semble que ça vaut mieu)

    J'aurais sûrement encore besoin d'aide , j'ai bien du chemin à faire...


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

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/11/2007, 10h20
  2. Réponses: 1
    Dernier message: 08/02/2007, 09h11
  3. Pourquoi mon code est plus lent que Arrays.sort
    Par alexis779 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2006, 12h44
  4. [Tableaux] Mon code est bon ?
    Par garaut dans le forum Langage
    Réponses: 8
    Dernier message: 14/11/2006, 15h47
  5. [Dates] calcul de date est ce que mon code est bon?
    Par carmen256 dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2006, 11h30

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