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 :

Ajout d'un nom


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut Ajout d'un nom
    Bonjour,
    Une petite aide pour ajouter un nom svp.
    Quand j'ajoute un nom c'est bon. Le problème se pose quand je veux ajouter un deuxième nom: il s'ajoute correctement mais aussi le premier nom ajouté s'écrase et à sa place apparait le deuxième nom ajouté!!!
    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
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define Nmax 50           /* Nmax: nbre maxi de  noms               */
    #define Mmax 100          /* Mmax: nbre maxi de caracteres des noms */
     
     
     
    int main(int argc, char *argv[]) 
    {
        /* Declarations */
        char chaine[Nmax][Mmax];  /* Tableau des noms                                 */
        char *liste[Nmax];        /* Tableau de pointeurs sur les noms                */
        char *A;                  /* Pointeur auxiliaire                              */
        char c;                   /* Pour controler la boucle de saisie               */
        int I, J;                 /* Indices                                          */
        int n;                    /* Nbre reel des lignes du tableau des nom          */
        int pos;                  /* Indice a partir duquel le tableau n'est pas trie */
        char nom_aux[Mmax];       /* Chaine auxiliaire pour le menu                   */
        int B;                    /* Aura le role d'un booleen                        */
     
     
        /* Presentation du programme */    
    puts("Bonjour,\n TurboListe est un programme qui vous permet de saisir et jouer sur une liste denoms en utilisant les options:\nRecherche : rechercher un nom sur la liste.\nAjout     : ajouter un nom a la liste.\nSupression: supprimer un nom de la liste.\n\nVeuillez commencer par la saisie de la liste.\n"); 
     
     
     
     
     
     
     
        /* Saisie des noms */
        I=0;
        do
        {  
            printf("Entrer le nom %d: ", I+1);
            gets((char*)(chaine+I));
            I++;
            if(I<Nmax)
              do
              {
                puts("\nVoulez-vous entrer un autre nom ?(O/N)\n");
                c=getch();
              }
              while(c!='o' && c!='O' && c!='n' && c!='N');
        }
        while(I<Nmax && (c=='o' || c=='O'));
        n=I--; /* Nbre reel des lignes du tableau */
     
     
        /* Affesctation des adresses aux pointeurs */
        for(J=0; J<n; J++)
            liste[J]=(char *)(chaine+J);
     
     
     
        /* Tri du tableau lexicographiquement */
        for (I=0; I<n-1; I++)
           {
            pos=I;
            for (J=I+1; J<n; J++)
              if (strcmp(liste[J],liste[pos])<0) 
                 pos=J;
            A=liste[I];
            liste[I]=liste[pos];
            liste[pos]=A;
           }
     
     
     
        /* Affichage du tableau trie */
        puts("Liste triee lexicographiquement:\n");
        for (J=0; J<n; J++)
            puts(liste[J]);
     
     
    do
    {  
     
     
           c=getch(); 
     
     
          /* Ajout d'un nom */
        if(c=='a')
             {
              if(n<Nmax)
              {
              puts("\nEntrer le nom que vous voulez ajouter");
              gets(nom_aux);
              I=-1;
              do
              I++;
              while(strcmp(liste[I], nom_aux)<0 && I<n-1);
              if(strcmp(liste[n-1], nom_aux)<0)
                 J=n;
              else
                {
                 J=I;
                 for(I=J; I<n; I++)
                   liste[n-I+J]=liste[n-1-I+J];
                }
              liste[J]=nom_aux;
              n++; /* Nbre reel des lignes du tableau */        
              }
              else
              puts("\nTaille maximale atteinte");
              puts("\nListe triee lexicographiquement:");
              for (J=0; J<n; J++)
               puts(liste[J]);
             }
             c=getch();
    }
     while(c=='r');       
     
      system("PAUSE");	
      return 0;
    }

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Chez moi, ça marche (gcc 4.3.0 Fedora 9).

    Quel compilateur utilises-tu ?

  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
    Le programme ne compile pas :
    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
        /* Tri du tableau lexicographiquement */
        for (I=0; I<n-1; I++)
           {
    ....
            A=liste[i];
            liste[i]=liste[pos];
    ....
           }
    ....
          /* Ajout d'un nom */
        if(c=='a')
             {
              if(n<Nmax)
              {
    ....
              while(strcmp(liste[i], nom_aux)<0 && I<n-1);
    i est non défini. Si on le remplace par I, le programme semble marcher pour la saisie et le classement.

    - Préférer fgets (sur stdin) à gets pour la saisie. La fonction permet de limiter le nombre de caractères lus et donc d'éviter un dépassement de capacité du buffer

  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 yo_haha Voir le message
    Quand j'ajoute un nom c'est bon. Le problème se pose quand je veux ajouter un deuxième nom: il s'ajoute correctement mais aussi le premier nom ajouté s'écrase et à sa place apparait le deuxième nom ajouté!!!
    Ce code est incomplet et non standard.
    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
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    Linking console executable: bin\Debug\hello.exe
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:44: warning: implicit declaration of function `getch'
    C:\dev\hello\main.c:65: error: `i' undeclared (first use in this function)
    C:\dev\hello\main.c:65: error: (Each undeclared identifier is reported only once
    C:\dev\hello\main.c:65: error: for each function it appears in.)
    C:\dev\hello\main.c:21: warning: unused variable `B'
    C:\dev\hello\main.c: At top level:
    C:\dev\hello\main.c:10: warning: unused parameter 'argc'
    C:\dev\hello\main.c:10: warning: unused parameter 'argv'
    Process terminated with status 1 (0 minutes, 0 seconds)
    3 errors, 4 warnings

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Ce code est incomplet et non standard
    Cependant, une fois ces quelques erreurs corrigées (simple inversion minuscule/majuscule pour I, par exemple), le programme fonctionne chez moi et chez Diogène. On n'observe pas d'écrasement comme signalé dans le premier post.

Discussions similaires

  1. [2008R2] Ajout espace de nom pour script?
    Par guilopouloos dans le forum SSIS
    Réponses: 2
    Dernier message: 27/03/2012, 12h03
  2. [AC-2002] requete ajout avec meme nom de champ
    Par poliart dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/07/2009, 12h07
  3. comment ajouté une colonne nom basé à un bloc?
    Par monpseudonom dans le forum Forms
    Réponses: 1
    Dernier message: 09/01/2009, 10h24
  4. net use automatique avec ajout d'un nom au lecteur
    Par Soria17 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 20/04/2007, 13h30

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