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 :

enregistrement de chaînes de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut enregistrement de chaînes de caractères
    Bonjour,

    Je suis en train de faire un programme en C qui doit gérer des fiches personnes comportant des informations sur des personnes.

    Mais j'ai un petit soucis concernant la création de ce programme.

    En fait pour l'instant tout fonctionne bien sauf un léger hic qui ne me permet pas de continuer à programmer.

    Bon tout d'abord voici mon code :

    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 <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void fclean(char *, FILE *);
     
     
    int main (void)
    {
     
    int nombrefiches=0;
    int end = 0;
    char (*p_tab)[50] = NULL;
    int err = EXIT_SUCCESS;
     
     
    printf("Programme de gestion de Fiches Personnes :\n");
     
    printf("Combien de Fiches personnes souhaitez-vous enregistrer ?\n");
    scanf("%i",&nombrefiches);
     
    printf("Vous voulez enregistrer %i Fiches Personnes\n",nombrefiches);
     
    system("pause");
     
    p_tab = malloc(nombrefiches * sizeof *p_tab);
     
        if (p_tab != NULL)
        {
            int i=1;
     
            /* Initialisation des n premiers octets du tableau p_tab avec le caractère 0*/
            memset(p_tab, '0', nombrefiches * sizeof (*p_tab));
     
            /* Saisie des chaines de caractère */
            for (i = 1; i < nombrefiches+1 && end == 0; i++)
            {
                printf("Entrez la Fiche Personne n°%i:",i);
     
                fflush(stdout);    //vidage du tampon après chaque saisie
     
                if (fgets(p_tab[i], sizeof p_tab[i], stdin) != NULL)
                {
                    fclean(p_tab[i], stdin);
     
                    if (strcmp(p_tab[i], "quit") == 0)
                    {
                        *p_tab[i] = 0;
                        end = 1;
                    }
                }
            }
     
            /* Affichage des chaines saisies */
            for (i = 1; i < nombrefiches+1 && *p_tab[i] != 0; ++i)
            {
                puts(p_tab[i]);
            }
     
            free(p_tab);
            p_tab = NULL;
        }
        else
        {
            fprintf(stderr, "Erreur d'allocation mémoire!\n");
            system("pause");
            err = EXIT_FAILURE;
        }
        system("pause");
        printf("\n");
        return err;
    }
     
    void fclean(char *s_buff, FILE *fp)
    {
        char *pc = strchr(s_buff, '\n');
     
        if (pc != NULL)
        {
            *pc = 0;
        }
        else
        {
            int c;
            while ((c = fgetc(fp)) != '\n' && c != EOF)
            {
                continue;
            }
        }
    }
    Je vous explique en quelques mots. L'utilisateur doit rentrer lui même les caractéristiques des personnes à enregistrer. Donc je fais un malloc pour allouer la mémoire pour les chaines de caractères.

    Mais lorsque j'exécute pour l'instant mon programme, la fiche numéro 1 ne permet pas d'écrire dans la fenêtre alors que pour les autres fiches tout fonctionne bien. Je pense qu'il y a un problème au niveau de la saisie des chaines de caractères mais je ne voit pas ou.

    Si quelqu'un a une idée, cela m'avancerait beaucoup.

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Tu alloues dans p_tab le nombre de fiches saisies par l'utiulisateur
    et tu remplis ton tableau de l'indice 1 à nb_fiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    p_tab = (char (*)[50])malloc(nombrefiches * sizeof *p_tab);
     
    for (i = 1; i < nombrefiches+1 && end == 0; i++)
    {
    ...
    if (fgets(p_tab[i], sizeof p_tab[i], stdin) != NULL)

    mais p_tab[nb_fiche] n'existe pas
    p_tab est valide de 0 à (nb_fiche - 1)

    Autre chose, j'ai eu du mal à décoder p_tab, je pense qu'il y a plus simple comme ecriture

    De plus, il est déconseillé de mélanger fgets(stdin) et scanf()
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Tu alloues dans p_tab le nombre de fiches saisies par l'utiulisateur
    et tu remplis ton tableau de l'indice 1 à nb_fiche
    De maniere generale, en C, les indices vont de 0 a N-1 et non de 1 a N...

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    De maniere generale, en C, les indices vont de 0 a N-1 et non de 1 a N...
    C'est vrai que dit comme cela, c'est plus clair que ce que j'ai dis
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre éclairé Avatar de charlix
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    285
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 285
    Par défaut
    Ok pour les indices mais sinon est ce que vous avez compris mon soucis ?

    Parce que sans considéré les indices, le premier emplacement de chaines de caracteres ne donne rien. Est ce que vous savez pourquoi ?

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Je crois que que le problème vient du fait que tu mélange allègrement scanf() et gets()

    Je l'ai vu hier soir, sous VS 2005, le 1er nom n'est pas saisi par fgets() car il y a eu au préalable la saisie du nombre de fiches par scanf() ce qui "perturbe" le flux stdin
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. [MySQL] Inserer chaîne de caractères dans enregistrement existant
    Par chris52 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 03/05/2012, 14h05
  3. Réponses: 0
    Dernier message: 15/11/2011, 15h42
  4. Unicode, chaîne de caractères et fichier enregistré
    Par yoshik dans le forum Général Python
    Réponses: 12
    Dernier message: 27/07/2009, 19h16
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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