Partage
  • Partager sur Facebook
  • Partager sur Twitter

Soucis sur les fonctions

    13 août 2008 à 15:48:34

    Bonjour tout le monde,

    Je suis en train de bosser sur un logiciel de recensement quelque chose de simple à priori...

    #include <stdio.h>
    long afficherMenu ();
    void ajouterPersonne(); //prototype
    
    typedef struct recensement recensement;
    struct recensement
    {
    	long age;
    	
    	char nom[100], prenom[100];
    };
    
    
    
    
    long afficherMenu()
    	{
    		long choix;
    		printf("=================\n");
    		printf("===RECENSEMENT===\n");
    		printf("=================\n");
    		printf("1. Afficher les valeurs actuelles \n");
    		printf("2. Saisir de nouvelles personnes \n");
    		printf("3. Trier les personnes\n");
    		printf("4. Statistiques\n");
    		printf("5. Effacer\n");
    		printf("Veuillez faire votre choix :");
    		scanf("%ld", &choix);
    		return choix;
    	}
    
    void ajouterPersonne()
    	{
    	long i = 0;
    	recensement personne[100]; //déclaration d'une variable structurée personne
    	printf("============================= \n");
    	printf("Ajout d'une nouvelle personne \n");
    	printf("============================= \n");
    	printf("Veuillez entrer son nom :");
    	scanf ("%s", personne[i].nom);
    	printf("Veuillez entrer son prenom :");
    	scanf ("%s", personne[i].prenom);
    	printf("Veuillez entrer son age :");
    	scanf ("%s", personne[i].age);
    	printf("Personne correctement ajoutee!");
    	
    	}
    	
    	
    
    int main (int argc, const char * argv[]) 
    {
    
    
    		switch(afficherMenu())
    		{
    			case 1:
    			printf("vous avez choisi le 1 \n");
    			break;
    		
    			case 2:
    			ajouterPersonne();
    			break;
    		
    			case 3:
    			printf("vous avez choisi le 3 \n");
    			break;
    			
    			case 4:
    			printf("vous avez choisi le 4 \n");
    			break;
    
    			case 5:
    			printf("vous avez choisi le 5 \n");
    			break;
    		}
        return 0;
    }
    


    Pour la fonction qui m'affiche le menu, il m'envoie la bonne valeur dans mon switch et m'affiche la rubrique correspondante. OK
    Ensuite c'est pour ajouter une personne: écrire dans ma variable structurée et incrémenter un i afin que lorsqu'on effectue une nouvelle saisie la nouvelle personne prenne la bonne place et comment afficher tout ça dans une fonction d'affichage.

    Si vous aviez un bout de chemin à m'indiquer ou des éclaircissements à m'apporter j'en serai ravi :) . Car malgré le tutoriel sur le C que j'ai relu plusieurs fois je me sens coincé :(
    Sans les fonctions ça marchait bien mais quel bordel :-° .

    Merci d'avance pour vos futures réponses!


    • Partager sur Facebook
    • Partager sur Twitter
      13 août 2008 à 17:06:18

      Citation : viewtifulced

      Je suis en train de bosser sur un logiciel de recensement quelque chose de simple à priori...


      struct recensement
      {
         long age;
      <...>
         scanf ("%s", personne[i].age);
      

      Attention, age est de type long. Pour scanf(), il faut donc un "%ld". D'autre part scanf() attend une adresse... Il manque donc quelque chose...
      static void ajouterPersonne (void)
      {
         long i = 0;
      /* déclaration d'une variable structurée personne */
         recensement personne[100];
      

      Quel intérêt de définir un tableau de 100 ici ? Ca fait quand même au moins 20.000 bytes pris en mémoire automatique. Pour en faire quoi exactement ?

      Ceci convient, non ?
      static void ajouterPersonne (void)
      {
      /* déclaration d'une variable structurée personne */
         recensement personne;
      

      En plus, ça correspond au commentaire...

      D'autre part, si dans cette fonction, tu ne fais qu'écrire dans une variable locale, l'intérêt est limité... Soit tu écris dans un fichier, soit via un pointeur, dans une variable définie ailleurs ...

      Par exemple :
      static void ajouterPersonne (recensement *p_personne)
      {
      <...>
         printf ("Veuillez entrer son nom :");
         scanf ("%s", p_personne->nom);
      etc.
      

      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        13 août 2008 à 18:40:21

        Merci pour tes précisions, ça devient plus clair (enfin c'est mon impression...).

        Déjà au lieu de déclarer ma structure dans une fonction je le fait dans le main.
        Dans le main, je peux déclarer une variable i qui va s'incrémenter de 1 à chaque fois que l'on veut ajouter une personne.
        Ensuite envoyer l'adresse de i à ma fonction ajouterPersonne:

        void ajouterPersonne ( recensement &i);
        



        Enfin dans la fonction ajouterPersonne:


        static void ajouterPersonne (recensement *i)
        {
        <...>
           printf ("Veuillez entrer son nom :");
           scanf ("%s", personne[i]->nom);
        etc.
        


        J'espère que je fais pas à nouveau fausse route.... :euh:

        • Partager sur Facebook
        • Partager sur Twitter
          13 août 2008 à 18:57:41

          Citation : viewtifulced

          void ajouterPersonne ( recensement &i);
          



          Ceci n'a aucun sens. L'adresse c'est tout simplement le nom du tableau + i.
          void ajouterPersonne (recensement + i);
          

          Citation : Pas de titre


          Enfin dans la fonction ajouterPersonne:


          static void ajouterPersonne (recensement *i)
          {
          <...>
             printf ("Veuillez entrer son nom :");
             scanf ("%s", personne[i]->nom);
          etc.
          


          Est-ce que tu relis ce que tu écris ? c'est n'importe quoi... Tu codes au hasard ? (en plus, j'avais indiqué une piste sérieuse...)
          static void ajouterPersonne (recensement *p_personne)
          {
          <...>
             printf ("Veuillez entrer son nom :");
             scanf ("%s", p_personne->nom);
          etc.
          


          • Partager sur Facebook
          • Partager sur Twitter
          Music only !

          Soucis sur les fonctions

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown