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 :

probleme insertion dans un tableau si pas d'occurence


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 25
    Points : 20
    Points
    20
    Par défaut probleme insertion dans un tableau si pas d'occurence
    Bonjour,

    le but lire un nouveau nom et l'inscrire dans un tableau si le nom n'y est pas encore enregistrer.

    sorti du programme avec la touche "x" ou 20 nom inscrits.

    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
     
     
    //#include "stdafx.h"
    #include "stdlib.h"
    #include "string.h"
     
     
    typedef char CH20[21];
    typedef char CH15[16];
     
    struct PERS {
              CH20 nom;
              int nb;
                }PERS;
     
     
     
    void main()
    {
     
    struct PERS TN[20];
    int nbp=0;
    int k;
    CH20 nomlu;
     
    strcpy(TN[0].nom,"premier");
     
    printf( "ecrire un nom\n" );
    gets (nomlu);
     
    do
    {
    if ( strcmp (TN[0].nom,"premier")=0 )
         strcpy (TN[0].nom,nomlu) && printf ("premier nom inserer\n");
    else {
            for ( k=nbp ; k<0 && strcmp( nomlu,TN[k].nom)<0 ; k=k-1 )
            {
            nbp=nbp+1 && strcpy ( TN[nbp].nom,nomlu ) && printf ("nom %d inserer\n",nbp);
     
            if ( strcmp(TN[k].nom,nomlu)==0 )
              {
               ("erreur nom deja inscrit\n");
              }
            }
         nbp=nbp+1;
     
        }
     
    printf ( "ecrire un nom\n" );
    gets ( nomlu );
    //printf ("vous avez ecrit le nom suivant : %s\n",nomlu);
    }
    while ( nomlu[0]!='x' && nbp <20 );
     
     
    printf ("vous avez note %d nom\n",nbp );
     
    for ( k=0 ; k<nbp ; k=k+1 )
         printf ("nom %s enregistrer\n",TN[nbp].nom);
     
    return  ;
     
    }

    voici le rescultat :

    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
     
     
     
    exercise # ./test
    ecrire un nom
    fred
    ecrire un nom
    luc
    ecrire un nom
    momo
    ecrire un nom
    luc
    ecrire un nom
    x
    vous avez note 4 nom
    nom net enregistrer
    nom net enregistrer
    nom net enregistrer
    nom net enregistrer
    exercise #

    moi je voudrais ca :


    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
     
     
     
    exercise # ./test
    ecrire un nom
    fred
    ecrire un nom
    luc
    ecrire un nom
    momo
    ecrire un nom
    luc
    erreur non deja inscrit
    ecrire un nom
    x
    vous avez note 3 nom
    nom fred enregistrer
    nom luc enregistrer
    nom momo enregistrer
    exercise #

    quelqu'un a une idée pour quoi mes test de nom dans le tableau ne fonctionne pas dans la boucle ?

    merci

    [/code]

  2. #2
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Ce code est loin d'être au point :

    - A quoi sert la globale PERS ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct PERS {
              CH20 nom;
              int nb;
                }PERS;
    - Le prototype de main est int main(void)

    - Eviter gets et préférer fgets sur stdin (et supprimer le '\n' si il y a lieu)

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( strcmp (TN[0].nom,"premier")=0 )
    est illégal. Le compilateur a dû le signaler comme erreur

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbp=nbp+1 && strcpy ( TN[nbp].nom,nomlu ) && printf ("nom %d inserer\n",nbp);
    Ce genre d'expression n'est pas illégale, mais dangereuse et peu claire : les && ne sont absolument pas justifiés.

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("erreur nom deja inscrit\n");
    ne fait rien du tout

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ( k=0 ; k<nbp ; k=k+1 )
         printf ("nom %s enregistrer\n",TN[nbp].nom);
    L'indice doit être k, pas nbp


    Tu peux coder l'algorithme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1 - nbp = 0
    2 - Lire un nom dans nomlu (fgets)
      - Si nomlu[0] != 'x' 
            - Si c'est le premier nom (nbp == 0) afficher "insertion du premier nom"
            - Rechercher si ce nom existe :
                De k = 0 à nbp voir si TN[k].nom est identique à nomlu. Si on en trouve un, arrêter la recherche.
            - Ce nom n'existe pas déjà (k== nbp) : ajouter le dans TN[nbp].nom et incrémenter nbp.
              Sinon, afficher un message.
    3- recommencer en 2 tant que  nomlu[0] != 'x' et nbp <20
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. probleme d'insertion dans un tableau (WMI)
    Par sono77 dans le forum VBScript
    Réponses: 5
    Dernier message: 22/04/2008, 18h09
  2. Réponses: 4
    Dernier message: 26/06/2006, 16h16
  3. [Tableaux] probleme unserialize dans un tableau(list)
    Par urikawa dans le forum Langage
    Réponses: 2
    Dernier message: 19/06/2006, 11h29
  4. Réponses: 16
    Dernier message: 02/12/2005, 10h39

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