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 :

mini projet C


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 5
    Points
    5
    Par défaut mini projet C
    Voila mon programme qui conciste a créer une annuaire telephonique
    lorsque je comile il me donne 0 erreur et 0 warning mais lorsque je link il me donne 1 erreur 0 warnig

    je ne sais pas où est le problème, le programme est le suivant:

    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
    #include<stdio.h>
    struct personne {
    	char nom[20];
    	char num[20];
    }personne[20];
    void siasie(struct personne *perso,int nombre)
    {
    	int i;
    	for(i=0;i<nombre;i++)
    	{
    		printf("entrez le nom = ");
    	    scanf("%s",&perso->nom);
            printf("entrez le num = ");
    	    scanf("%s",&perso->num);
    	}
     
    }
     
    void affiche (struct personne perso[20],int nombre)
    {
    	int i;
    	for(i=0;i<nombre;i++)
    	{
    		printf("%d de numero %d", perso->nom,perso->num);
    	}
    }
     
    void main(void)
    {
    	struct personne perso[20];
    	int nombre;
    	printf("entrez le nombre");
    	scanf("%d",&nombre);
    	siasie(perso,nombre);
    	affiche(perso,nombre);
    }

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 109
    Points
    109
    Par défaut
    balise code stp
    le code avec les modifs

    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
    #include <stdio.h>
    
    
    
    struct personne {
        char nom[20];
        char num[20];
    } personne[20];
    
    void siasie(struct personne *perso, int nombre)
    {
        int i;
        for (i = 0; i < nombre; i++) {
    	printf("entrez le nom = ");
    	scanf("%s", perso[i].nom);
    	printf("entrez le num = ");
    	scanf("%s", perso[i].num);
        }
    
    }
    
    void affiche(struct personne perso[20], int nombre)
    {
        int i;
        for (i = 0; i < nombre; i++) {
    	printf("%s de numero %s", perso[i].nom, perso[i].num);
        }
    }
    
    int main(void)
    {
        struct personne perso[20];
        int nombre;
        printf("entrez le nombre");
        scanf("%d", &nombre);
        siasie(perso, nombre);
        affiche(perso, nombre);
        return 0;
    }
    While I breath, I hope.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par eminemanaas1985
    Voila mon programme qui conciste a créer une annuaire telephonique
    lorsque je comile il me donne 0 erreur et 0 warning
    Ca me fera toujours rire...
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `siasie':
    main.c:14: warning: char format, different type arg (arg 2)
    main.c:16: warning: char format, different type arg (arg 2)
    main.c: In function `affiche':
    main.c:24: warning: int format, pointer arg (arg 2)
    main.c:24: warning: int format, pointer arg (arg 3)
    main.c: At top level:
    main.c:28: warning: return type of 'main' is not `int'
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 5 warnings
    http://emmanuel-delahaye.developpez....tm#cfg_compilo
    Pas de Wi-Fi à la maison : CPL

  4. #4
    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 quelques modififcations suite à la contribution de scriptoff. Saisir des chaines de caractères avec scanf("%s", tampon), c'est fragile et ça devrait être interdit. Deux solutions: on apprend à utiliser scanf() avec cet excellent tutoriel http://xrenault.developpez.com/tutoriels/c/scanf/ ou on utilise fgets():
    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    #include <stdio.h>
    #include <string.h>
     
    #define NMAX 20
     
    struct personne {
        char nom[20];
        char num[20];
    };
     
    /**
     * -TC- Vide le tampon du flux d'entrée standard.
     */
    static void vider_stdin(void)
    {
        scanf("%*[^\n]");
        getchar();
    }
     
    /**
     * -TC- Saisit un chaîne de caractère entrée par l'utilisateur de manière
     * sécurisée.
     *
     * Si la chaîne entrée par l'utilisateur est trop longue pour être contenue
     * le tampon prévu à cet effet, un message d'erreur est affiché, et
     * l'utilisateur est invité à répéter sa saisie.
     *
     * @param s_tampon Tampon destiné à recevoir la chaîne de l'utilisateur.
     * @param taille Taille du tampon.
     * @param s_message Invite à afficher à l'utilisateur.
     */
    static void saisie_chaine_stdin(char *s_tampon,
                                    size_t taille,
                                    char const *s_message)
    {
        int saisie_ok = 0;
        char *pc = NULL;
     
        while (saisie_ok != 1)
        {
            /* -TC- On affiche le message à l'utilisateur */
            printf("%s ", s_message);
            fflush(stdout);
     
            /*-TC- Saisie de la chaîne */
            fgets(s_tampon, taille, stdin);
            if ((pc = strchr(s_tampon, '\n')) != NULL) /* -TC- saisie OK */
            {
                saisie_ok = 1;
                *pc = '\0';
            }
            else /* -TC-La chaîne de l'utilisateur a été tronquée */
            {
                /*-TC- Si la chaine est trop longue, on affiche un message
                  d'erreur, on vide le tampon et on recommence */
                fprintf(stderr, "Votre entrée est trop longue! Réessayez..\n");
                vider_stdin();
            }
        }
    }
     
    void saisie(struct personne perso[], int nombre)
    {
        int i;
        for (i = 0; i < nombre; i++) {
            saisie_chaine_stdin(perso[i].nom, sizeof perso[i].nom,
                                "entrez le nom = ");
            saisie_chaine_stdin(perso[i].num, sizeof perso[i].num,
                                "entrez le num = ");
        }
     
    }
     
    void affiche(struct personne perso[], int nombre)
    {
        int i;
        for (i = 0; i < nombre; i++) {
            printf("%s de numero %s\n", perso[i].nom, perso[i].num);
        }
    }
     
    int main(void)
    {
        struct personne perso[NMAX];
        int nombre;
        int rc;
     
        printf("entrez le nombre (entre 0 et %d): ", NMAX);
        /* On force l'écriture sur stdout */
        fflush(stdout);
     
        /* -TC- sécurisons un peu la saisie avec scanf() */
        while ((rc = scanf("%d", &nombre)) != 1 || nombre < 0 || nombre > NMAX)
        {
            /*-TC- La saisie a échoué: on vide la tampon et on recommence */
            vider_stdin();
            printf("entrez le nombre (entre 0 et %d): ", NMAX);
            fflush(stdout);
        }
        /*-TC- Ici, il reste au minimum '\n' sur le tampon de stdin. On purge cela*/
        vider_stdin();
     
        saisie(perso, nombre);
        affiche(perso, nombre);
        return 0;
    }
    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++

    +

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mujigka
    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
    int main(void)
    {
        /* -TC- sécurisons un peu la saisie avec scanf() */
        while ((rc = scanf("%d", &nombre)) != 1 || nombre < 0 || nombre > NMAX)
        {
            /*-TC- La saisie a échoué: on vide la tampon et on recommence */
            vider_stdin();
            printf("entrez le nombre (entre 0 et %d): ", NMAX);
            fflush(stdout);
        }
        /*-TC- Ici, il reste au minimum '\n' sur le tampon de stdin. On purge cela*/
        vider_stdin();
     
        saisie(perso, nombre);
        affiche(perso, nombre);
        return 0;
    }

    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
     
    #include "ed/inc/io.h"
     
    #include <stdio.h>
    #include <string.h>
    #include <limits.h>
     
    #define NMAX 20
     
    struct personne
    {
       char nom[20];
       char num[20];
    };
     
    static void saisie_chaine (char *s_tampon, size_t taille,
                               char const *s_message)
    {
       int err = 0;
       do
       {
          printf ("%s ", s_message);
          fflush (stdout);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               /*-TC- Saisie de la chaîne */
     
          err = get_s (s_tampon, taille);
          if (err)
          {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            /*-TC- Si la chaine est trop longue, on affiche un message d'erreur, on vide le tampon et on recommence */
             fprintf (stderr, "Votre entree est trop longue! Ressayez..\n");
          }
       }
       while (err);
    }
     
    static void saisie (struct personne perso[], int nombre)
    {
       int i;
       for (i = 0; i < nombre; i++)
       {
          saisie_chaine (perso[i].nom, sizeof perso[i].nom, "entrez le nom = ");
          saisie_chaine (perso[i].num, sizeof perso[i].num, "entrez le num = ");
       }
    }
     
    static void affiche (struct personne perso[], int nombre)
    {
       int i;
       for (i = 0; i < nombre; i++)
       {
          printf ("%s de numero %s\n", perso[i].nom, perso[i].num);
       }
    }
     
    int main (void)
    {
       struct personne perso[NMAX];
       int nombre = -1;
       int err;
     
       do
       {
          long n;
          printf ("entrez le nombre (entre 0 et %d): ", NMAX);
          fflush (stdout);
          err = get_l (&n) || n < INT_MIN || n > INT_MAX;
          if (!err)
          {
             nombre = (int) n;
          }
          else
          {
             fprintf (stderr, "Nombre errone ou hors limites! Reessayez..\n");
          }
       }
       while (err || nombre < 0 || nombre > NMAX);
     
       saisie (perso, nombre);
       affiche (perso, nombre);
       return 0;
    }
    http://emmanuel-delahaye.developpez.com/clib.htm
    Module IO
    Pas de Wi-Fi à la maison : CPL

  6. #6
    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
    Using à gaz? Pourquoi? Avec scanf(), je ne vois pas comment faire autrement, à part encapsuler tout ça dans une fonction saisir_entier()... Ai-je mal fait?

    EDIT: J'admets qu'il y a plus simple...

    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++

    +

  7. #7
    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 Emmanuel
    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
     
    #include "ed/inc/io.h"
     
    #include <stdio.h>
    #include <string.h>
    #include <limits.h>
     
    #define NMAX 20
     
    struct personne
    {
       char nom[20];
       char num[20];
    };
     
    static void saisie_chaine (char *s_tampon, size_t taille,
                               char const *s_message)
    {
       int err = 0;
       do
       {
          printf ("%s ", s_message);
          fflush (stdout);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               /*-TC- Saisie de la chaîne */
     
          err = get_s (s_tampon, taille);
          if (err)
          {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            /*-TC- Si la chaine est trop longue, on affiche un message d'erreur, on vide le tampon et on recommence */
             fprintf (stderr, "Votre entree est trop longue! Ressayez..\n");
          }
       }
       while (err);
    }
     
    static void saisie (struct personne perso[], int nombre)
    {
       int i;
       for (i = 0; i < nombre; i++)
       {
          saisie_chaine (perso[i].nom, sizeof perso[i].nom, "entrez le nom = ");
          saisie_chaine (perso[i].num, sizeof perso[i].num, "entrez le num = ");
       }
    }
     
    static void affiche (struct personne perso[], int nombre)
    {
       int i;
       for (i = 0; i < nombre; i++)
       {
          printf ("%s de numero %s\n", perso[i].nom, perso[i].num);
       }
    }
     
    int main (void)
    {
       struct personne perso[NMAX];
       int nombre = -1;
       int err;
     
       do
       {
          long n;
          printf ("entrez le nombre (entre 0 et %d): ", NMAX);
          fflush (stdout);
          err = get_l (&n) || n < INT_MIN || n > INT_MAX;
          if (!err)
          {
             nombre = (int) n;
          }
          else
          {
             fprintf (stderr, "Nombre errone ou hors limites! Reessayez..\n");
          }
       }
       while (err || nombre < 0 || nombre > NMAX);
     
       saisie (perso, nombre);
       affiche (perso, nombre);
       return 0;
    }
    http://emmanuel-delahaye.developpez.com/clib.htm
    Module IO
    OK! Mais si ton usine à gaz faisait référence à scanf(), ce n'est pas moi mais le PO de ce fil qui ai fait le choix d'utiliser cette fonction. Je voulais le rendre attentif au fait qu'il était possible que la saisie avec scanf() échoue, de même que la nécessité que le nombre saisi soit borné. J'admets que le code que j'ai proposé n'était pas des plus élégants, mais pas spécialement difficile à assimiler.

    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++

    +

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mujigka
    OK! Mais si ton usine à gaz faisait référence à scanf(),
    Surtout à tout le code parasite que ça génère. Pourquoi il fait vider stdin() ici, ou là dans le code applicatif...

    Non seulement, les syntaxes de scanf() sont imbitables, mais en plus on passe son temps à nettoyer le tuyau...

    Je dis qu'il faut passer 1 ou 2 jours à résoudre le problèmes de saisies une bonne fois pour toutes (c'est d'ailleurs la raison d'être d'une partie des exercices du K&R...), et ensuite, affaire réglée définitivement. On passe à autre chose.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    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 Emmanuel Delahaye
    Surtout à tout le code parasite que ça génère. Pourquoi il fait vider stdin() ici, ou là dans le code applicatif...

    Non seulement, les syntaxes de scanf() sont imbitables, mais en plus on passe son temps à nettoyer le tuyau...

    Je dis qu'il faut passer 1 ou 2 jours à résoudre le problèmes de saisies une bonne fois pour toutes (c'est d'ailleurs la raison d'être d'une partie des exercices du K&R...), et ensuite, affaire réglée définitivement. On passe à autre chose.
    OK! Mais le fait est que de nombreux débutants débarquent sur ce forum avec du code et des scanf() partout. Cela ne fait pas beaucoup avancer les choses si je balance dans le tas les fonctions de ma bibliothèque toute faite. Je suis d'accord avec ta façon d'aborder les choses, puisque ton site m'a guidé et me guident toujours dans mon apprentissage (et en particulier sur la gestion des I/O, mais aussi tous les autres modules de la clib).

    J'aime beaucoup l'approche de K&R, et je regrette que ce ne soit pas de cette façon que le C soit enseigné à l'université, dans les écoles d'ingénieur, ou ailleurs. scanf() est une usine à gaz, nous somme bien d'accord. Mais lorsque quelqu'un l'utilise à la légère, je préfère mettre le doigt sur les faiblesses que présentent son code, et éventuellement l'aiguiller ensuite sur la construction de ses propres primitives de saisie. Je ne pense que ce soit bénéfique qu'un débutant utilise directement les fonctions de la clib. Il est plus profitable qu'il en reprenne l'interface, et qu'il ré-implante les fonctions à coups de fgetc(), strtol, strtod, etc.

    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++

    +

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mujigka
    Je ne pense que ce soit bénéfique qu'un débutant utilise directement les fonctions de la clib. Il est plus profitable qu'il en reprenne l'interface, et qu'il ré-implante les fonctions à coups de fgetc(), strtol, strtod,
    Evidemment. J'ai balancé intentionnellement un exemple un peu provoquant pour montrer que "si on veut, on peut"...

    ... alors qu'avec scanf(), cette fonction du Diable, on a beau faire des efforts louables, on arrive à une magnifique usine à gaz difficile à utiliser, à maintenir, à faire évoluer... Ca parait trop fragile ces purges dans tous les coins... Ca ne donne pas confiance, et je pense que ça fait peur aux débutants...

    En tout cas, moi, ça me fout la trouille !
    Pas de Wi-Fi à la maison : CPL

  11. #11
    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 Emmanuel Delahaye
    Evidemment. J'ai balancé intentionnellement un exemple un peu provoquant pour montrer que "si on veut, on peut"...

    ... alors qu'avec scanf'(), cette fonction du Diable, on a beau faire des efforts louables, on arrive à une magnifique usine à gaz difficile à utiliser, à maintenir, à faire évoluer... Ca parait trop fragile ces purges dans tous les coins... Ca ne donne pas confiance, et je pense que ça fait peur aux débutants...

    En tout cas, moi, ça me fout la trouille !
    Nous sommes donc d'accord au sujet de scanf(). Comment proposes-tu d'orienter un programmeur débutant en langage C qui utilise scanf() pour tout et en plus souvent de manière peu robuste et absolument pas sécurisée (la mode, ça semble être scanf("%s", tampon): je ne sais pas où on apprend ça). Je vais essayer de réfléchir à la meilleure manière d'aider les débutants dans ce domaine. Ton site est très bien pour cela. Pour une correction de code à cours terme... Je pense qu'avant de se lancer dans la conception de fonctions de saisie personnalisées, un débutant a besoin de pouvoir mesurer quelles sont les faiblesses des méthodes qu'il a apprises en cours. Il comprendra alors qu'il ne peut lui être que profitable de construire sa propre bibliothèque.

    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++

    +

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mujigka
    Comment proposes-tu d'orienter un programmeur débutant en langage C qui utilise scanf()
    Je trouve que la méthode est pas mal. fgets() + clean()... Ca résout pas mal de problèmes et c'est apparemment bien accepté par les débutants...
    Pas de Wi-Fi à la maison : CPL

  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
    La fonction clean ressemble pas mal au code que j'ai posté plus haut

    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++

    +

Discussions similaires

  1. Comment organiser un mini projet en C
    Par leCcsympas dans le forum C
    Réponses: 8
    Dernier message: 11/12/2006, 20h13
  2. mini projet en JSF
    Par solawe dans le forum JSF
    Réponses: 6
    Dernier message: 17/11/2006, 00h53
  3. [Projet] Idée de mini-projet?
    Par Arnaud F. dans le forum Général Java
    Réponses: 15
    Dernier message: 24/05/2006, 06h11
  4. [2D] Mini-projet : question pour une interface graphique
    Par kitsune dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 10/03/2006, 14h59
  5. [Socket][mini-projet] Quelques questions
    Par Baptiste Wicht dans le forum Entrée/Sortie
    Réponses: 22
    Dernier message: 22/12/2005, 17h16

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