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 :

Problème de retour de données;


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Problème de retour de données;
    Bonjour, bonsoir.

    Comment peut-on retourner plusieurs données dans une fonction?
    Je m'explique pour un exercice en C je dois créer une fonction qui permet d'inscrire des Ouvriers.

    Je dois retourner ainsi si mon enregistrement a été correctement réalisé 0 ou 1.
    Mais dans cette même fonction je dois intégrer deux compteurs:
    - Un compteur nHomme
    - Un compteur nFemme
    Pour, vous l'avez bien compris, compter le nombre d'homme et de femme ouvrier(e)s à la fin des inscriptions.

    Mais pourquoi? Car par après je devrais créer une Indexation de mes ouvriers dans un vecteur où les hommes trouveront leurs places en début de vecteur et les femmes après ceux-ci tout ça trié par ordre alphabétique.

    Les variables nHomme et nFemme sont dans la fonction main, je les renvoies donc dans ma fonction AjouterOuvri mais comment puis-je renvoyer mes deux compteurs dans le main pour ensuite renvoyer dans ma fonction Indexation.

    Voici le code qui n'est pas du tout terminé:

    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
    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
    #include <conio.h>
     
    struct Date {
                short Jour;
                short Mois;
                short Annee;
                };
    struct Ouvriers {
                char Genre;
                long NumRegistre;
                char Nom[25];
                char Prenom[30];
                char Rue[50];
                int CodePostal;
                char Ville[20];
                char Specialite[20];
                struct Date DateNaiss;
                struct Date DateEngag;
                    };
    void AfficheOuvri(struct Ouvriers[], int);
    int EncodeOuvri(struct Ouvriers[], int);
    main ()
    {
        struct Ouvriers Personne[100];
        int nOuvrier = 0;
        int nFemme;
        int nHomme;
        int i = 0;
        int Verif;
        long NumReg[100];
        int Index[100];
        char Data[100][56];
     
        nOuvrier = 0;
        do{
            Verif = EncodeOuvri(Personne, i);
            nOuvrier++;
            if(Verif == 0)
            {
                system("cls");
                printf("Vous venez de quitter l'inscription des ouvriers.");
                Sleep(1000);
            }
            else
            {
                if(Verif == 1)
                {
                    system("cls");
                    printf("-> Ouvrier correctement enregistre.");
                    Sleep(1000);
     
                }
            }
            system("cls");
            i++;
        }while(nOuvrier < 2 & Verif != 0);
     
     
    }
    int EncodeOuvri(struct Ouvriers Personne[], int i)
    {
        int Verif = 0;
     
        printf("\t\t\tFiche de l'ouvrier %d\n\n", i+1);
        printf("- Inscription\n\n");
        printf("Genre (M/F): ");
        fflush(stdin);
        scanf("%c", &Personne->Genre);
        if(Personne->Genre != '\n')
        {
            printf("\nNumero de Registre National: ");
            fflush(stdin);
            scanf("%ld", &Personne->NumRegistre);
            printf("\nNom: ");
            fflush(stdin);
            scanf("%s", Personne->Nom);
            printf("\nPrenom: ");
            fflush(stdin);
            scanf("%s", Personne->Prenom);
            printf("\nRue: ");
            fflush(stdin);
            scanf("%s", Personne->Rue);
            printf("\nCode postal: ");
            fflush(stdin);
            scanf("%d", &Personne->CodePostal);
            printf("\nVille: ");
            fflush(stdin);
            scanf("%s", Personne->Ville);
            printf("\nSpecialite: ");
            fflush(stdin);
            scanf("%s", Personne->Specialite);
     
            Verif = 1;
        }
        return Verif;
    }
    void AfficheOuvri(struct Ouvriers Personne[], int i)
    {
        printf("\nGenre: %c", Personne->Genre);
        printf("\nNumero de Registre: %ld", Personne->NumRegistre);
        printf("\nNom: %s", Personne->Nom);
        printf("\nPrenom: %s", Personne->Prenom);
        printf("\nRue: %s", Personne->Rue);
        printf("\nCode postal: %d", Personne->CodePostal);
        printf("\nVille: %s", Personne->Ville);
    }

    Quelques explications:
    1) Le programme se lance
    2) L'utilisateur rentre un maximum de 100 ouvrier(e)s, lorsqu'il veut arrêter les inscriptions il appuie ENTER lorsqu'on lui demande un Genre à la prochaine fiche d'inscription
    3) On affiche de manière séquentielle tous les ouvriers enregistrés
    4) Création de l'Index, Homme en premier Ordre alphabétique suivis des Femmes également Ordre alphabétique
    5) Affiche de l'index trié.


    Voilà pour ce que le programme devrait réaliser.
    Je ne demande en aucun cas la solution entière mais juste ceci:

    Comment puis-je renvoyer mes compteurs nHomme nFemme alors que je retourne déjà la variable Verif?
    Avec des pointeurs?

    Merci d'éclairer ma lanterne.

    Bonne soirée,

    Vincent.

  2. #2
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Les pointeurs sont une bonne solution, une autre solution pourrait être de créer une structure.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ok je vais un peu regarder tout ça.
    Je pense que les pointeurs sont plus accessibles vu que les structures nous n'avons que survolé cette matière.

  4. #4
    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
    Ok je vais un peu regarder tout ça.
    Je pense que les pointeurs sont plus accessibles vu que les structures nous n'avons que survolé cette matière.
    Pourtant tu utilises déjà les structures dans ton code. Autant continuer.
    Personnellement, je complèterais les définitions des structures de données par celle d'un ensemble d'ouvriers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct ListeOuvriers
    {
        int nOuvrier;
        int nFemme;
        int nHomme;
        struct Ouvriers Personne[100];
    };
    Avec les prototypes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int EncodeOuvrier(struct ListeOuvriers * liste);
    void AfficheOuvrier(struct Ouvriers const *Personne);
    void AfficheListeOuvriers(struct ListeOuvriers const * liste);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main (void)
    {
        struct ListeOuvriers Liste = {0,0,0};
        int Verif;
        do{
            Verif = EncodeOuvrier(&Liste);
            if(Verif == 0)
            { ....
    Dans EncodeOuvri(), les fflush(stdin) sont à proscrire car le comportement dépend de l'implémentation (marche avec Windows, mais pas avec les systèmes genre Linux). De préférence, vider le buffer d'entrée après utilisation plutôt qu'avant car alors on sait dans quel état il est et si il est vide ou non et le buffer est toujours dans un état connu (vide) au moment où on en a besoin.

    Pour vider le buffer d'entrée, voir la FAQ : Pourquoi ne faut-il pas utiliser fflush(stdin) pour vider le buffer clavier ? , A quoi sert la fonction fflush ? , Comment vider le buffer clavier ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

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

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En réalité nous avons vu les structures la semaine dernière et les structures ici dans le code présent on été réalisées par le prof lui même ainsi que la plupart des variables nous demandant de réaliser diverses fonctions.

    Je demanderai donc si je peux utiliser les structures en tant que tel.

    Merci des vos informations qui m'ont permis d'avancer.

    EDIT: Pour vider le buffer je vais essayer de changer ça.
    Merci.

Discussions similaires

  1. [XL-2007] Probléme de retour de donnée
    Par squel59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/11/2009, 19h55
  2. Problème de retour de données
    Par Spinoza23 dans le forum Oracle
    Réponses: 22
    Dernier message: 08/02/2007, 08h50
  3. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  4. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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