Structures En C
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Structures En C



  1. #1
    invite0723fd6b

    Structures En C


    ------

    Bonjour à tous, j'ai un soucis avec mon programme, lorsque je surprime un client la suppression ne se fait pas et pourtant la fonction me semble logique.
    J'ai pas mal cherché avant devenir poster ici donc merci à tous ceux qui pourraient m'apporter une aide éventuelle. (Code écrit sous "Code-Blocks").

    Code :


    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct _Date
    {
        short jour;
        short mois;
        short annee;
    };
    typedef struct _Date Date;
    
    struct _Client
    {
        char nom[30];
        char prenom[25];
        int numero;
        Date naissance;
        float montant;
    };
    typedef struct _Client Client;
    
    void InitialisationNom(Client*);
    void AjouterClient(Client*);
    void SupprimerClient(Client*);
    void AfficherToutTableau(Client*);
    
    int main()
    {
        Client listeclient[10];
        short sChoix,cont=0;
        InitialisationNom(&listeclient[0]);
    
        do
        {
            system("CLS");
            printf("MENU\n");
            printf("   1.Ajouter un client\n");
    
            printf("   2.Supprimer un client\n");
    
            printf("   3.Afficher tous les clients\n");
            printf("Quel est votre choix ?: ");
            scanf("%hd", &sChoix);
            switch(sChoix)
            {
            case 1:
                AjouterClient(&listeclient[0]);
             break;
             case 2:
                SupprimerClient(&listeclient[0]);
             break;
             case 3:
                 AfficherToutTableau(&listeclient[0]);
             break;
    
    
    
    
            }
    
            do
            {
                printf("Voulez vous continuer(0) ou quitter le programme(1) ?:");
                scanf("%hd", &cont);
            }while(cont<0 || cont >1);
        }while(cont==0);
    
    
    
        return 0;
    }
    
    
    void InitialisationNom(Client*pMembre)
    {
        short i;
        char temp = '!';
        for(i=0; i<10 ; i++)
        {
            strcpy(pMembre->nom,&temp);
            pMembre++;
        }
    }
    
    
    /* INPUT: *pMembre:Adresse du début du vecteur
       PROCESS:Permet d'ajouter un client dans la liste
       OUTPUT:/
    */
    
    void AjouterClient(Client *pMembre)
    {
        short i;
        char temp = '!';
        system("CLS");
        for(i=0; i<10 && (strcmp(pMembre->nom,&temp)!=0); i++)
        {
            pMembre++;
        }
        if(strcmp(pMembre->nom,&temp)==0 && i<10)
        {
            system("CLS");
            printf("Nom: ");
            fflush(stdin);
            gets(pMembre->nom);
            printf("\nPrenom: ");
            fflush(stdin);
            gets(pMembre->prenom);
            printf("\nNumero de membre: ");
            scanf("%d", &(pMembre->numero));
            printf("\nDate de naissance(sous la forme jj/mm/aaaa): \n");
            scanf("%hd/%hd/%hd", &(pMembre->naissance.jour),&(pMembre->naissance.mois),&(pMembre->naissance.annee));
            printf("\nMontant de l'ardoise a la cafeteria: ");
            scanf("%f", &(pMembre->montant));
        }
        else
        {
            printf("\nPlus de place dans le tableau");
        }
    }
    /* INPUT: *pMembre:Adresse du début du vecteur
       PROCESS:Permet d'afficher un client
       OUTPUT:/
    */
    void AfficherClient(Client *pMembre)
    {
        char NomClient[30];
        short i,cmp = 1;
        system("CLS");
    
        printf("Quel est le nom du client que vous voulez afficher ? : ");
        fflush(stdin);
        gets(NomClient);
        cmp = strcmp(NomClient,pMembre->nom);
        for(i=0; i<10 && cmp!=0; i++)
        {
            pMembre++;
            cmp = strcmp(NomClient,pMembre->nom);
    
        }
        if(cmp == 0)
        {
            printf("\nNom: %s", pMembre->nom);
            printf("\nPrenom: %s", pMembre->prenom);
            printf("\nNumero: %d", pMembre->numero);
            printf("\nDate de naissance: %hd/%hd/%hd", pMembre->naissance.jour, pMembre->naissance.mois, pMembre->naissance.annee);
            printf("\nMontant de l'ardoise: %.2f euros", pMembre->montant);
            printf("\n\n");
            system("PAUSE");
        }
        else
            printf("\nLe nom n'est pas present dans la liste");
    }
    /* INPUT: *pMembre:Adresse du début du vecteur
       PROCESS:Permet d'afficher tous les clients
       OUTPUT:/
    */
    void AfficherToutTableau(Client* pMembre)
    {
        short i;
        char temp = '!';
        system("CLS");
        for(i=0 ; i<10; i++)
        {
            if(strcmp(pMembre->nom,&temp)!=0 )
            {
                printf("\n");
                printf("\nNom: %s", pMembre->nom);
                printf("\nPrenom: %s", pMembre->prenom);
                printf("\nNumero: %d", pMembre->numero);
                printf("\nDate de naissance: %hd/%hd/%hd", pMembre->naissance.jour, pMembre->naissance.mois, pMembre->naissance.annee);
                printf("\nMontant de l'ardoise: %.2f euros", pMembre->montant);
                printf("\n\n");
    
            }
            pMembre++;
        }
    
    }
    /* INPUT: *pMembre:Adresse du début du vecteur
       PROCESS:Permet de supprimer un client
       OUTPUT:/
    */
    void SupprimerClient(Client* pMembre)
    {
        char NomClient[30], temp='!';
        short cmp = 1,i;
        system("CLS");
        printf("Quel est le nom du client que vous voulez supprimer ? : ");
        fflush(stdin);
        gets(NomClient);
        cmp = strcmp(NomClient,pMembre->nom);
        for(i=0; i<10 && cmp!=0; i++)
        {
            pMembre++;
            cmp = strcmp(NomClient,pMembre->nom);
    
        }
        if(cmp == 0)
        {
            strcpy(pMembre->nom,&temp);
        }
        else
        {
            printf("\nCe nom ne se trouve pas dans la liste ! ");
        }
    
    
    }

    -----

  2. #2
    invite1c6b0acc

    Re : Structures En C

    Bonjour,

    Il y a quelques trucs qui clochent dans ton code.

    1. Les fonction str... travaillent sur des chaines de caractères terminées par un caractère nul
    Les expressions strcmp(pMembre->nom,&temp) ou strcpy(pMembre->nom,&temp) sont donc aberrantes : elle ne peuvent fonctionner que si la variable temp est suivie (par hasard) par un caractère nul.
    temp devrait plutôt être une chaîne de 2 caractères :
    char * temp = "!"
    (le deuxième caractère est le terminateur : caractère nul ajouté par le compilateur en voyant le "")

    2. La fonction scanf lit le buffer clavier tant qu'il contient des caractères conforme au format. Dans ton menu, tu ne lis donc pas le retour chariot, ce qui empêche d'entrer un nom de client (le retour chariot restant dans le buffer est la réponse au premier gets, par exemple dans la fonction AjouterClient) Tu as testé ton programme ?
    Tu devrais utiliser fgets à chaque entrée (et non pas gets qui ne spécifie pas de longueur maximale).

    3. Ce n'est pas grave, mais les fflush(stdin) ne servent strictement à rien.

    A+

Discussions similaires

  1. [Biologie Moléculaire] Structures
    Par invite9d710677 dans le forum Biologie
    Réponses: 6
    Dernier message: 01/10/2008, 16h11
  2. C : Initialisation de structures/tableaux de structures
    Par invitef1d0ad93 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 12/08/2008, 11h57
  3. Structures dissipatives !!
    Par invitebd2b1648 dans le forum Physique
    Réponses: 19
    Dernier message: 09/03/2008, 23h28
  4. détermination de structures
    Par inviteca4fc44a dans le forum Physique
    Réponses: 17
    Dernier message: 21/01/2007, 10h42
  5. Structures dissipatives
    Par invite8bb88f80 dans le forum Physique
    Réponses: 0
    Dernier message: 23/09/2003, 19h59