Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2367 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Problème avec pointeur dans une structure

n°981002
podone
Posté le 14-02-2005 à 14:18:20  profilanswer
 

Reprise du message précédent :
Une mise en forme propre
 

Code :
  1. // struct.cpp : définit le point d'entrée pour l'application console.
  2. //
  3. #include "stdafx.h"
  4. // Taille du nom
  5. #define  NAMELENGTH     20
  6. #define  NAMEENTRY      "%20s"
  7. // Taille de l'information
  8. #define  INFOLENGTH     20
  9. #define  INFOENTRY      "%20s"
  10. // Structure fiche
  11. typedef struct _FICHE
  12. {
  13.    char  szNom[NAMELENGTH + 1];  // Nom
  14.    int   nAge;                   // Age
  15.    char  szInfo[INFOLENGTH + 1]; // Information
  16. }
  17. FICHE;
  18. typedef FICHE*          LPFICHE;
  19. // Encoder les fiches
  20. void Encoder(int     A_nFiches,     // IN
  21.              LPFICHE A_lpFiches);   // OUT
  22. // Afficher les fiches
  23. void Afficher(int       A_nFiches,     // IN
  24.               LPFICHE   A_lpFiches);   // IN
  25. int _tmain(int argc, _TCHAR* argv[])
  26. {
  27. // Nombre de fiches
  28. int         nFiches;
  29. // Fiches
  30. LPFICHE     lpFiches;
  31.    // Recuperer le nombre de fiches
  32.    printf("\nVeuillez saisir le nombre de fiches : " );
  33.    scanf("%d", &nFiches);
  34.    fflush(stdin);
  35.    // Allouer la memoire pour les fiches
  36.    lpFiches = (LPFICHE) malloc(nFiches * sizeof(FICHE));
  37.    // Recuperer les fiches
  38.    Encoder(nFiches, lpFiches);
  39.    // Afficher les fiches
  40.    Afficher(nFiches, lpFiches);
  41.    // Desallouer la memoire
  42.    free(lpFiches);
  43.  
  44. return 0;
  45. }
  46. // Encoder les fiches
  47. void Encoder(int     A_nFiches,  // IN
  48.              LPFICHE A_lpFiches) // OUT
  49. {
  50. // Compteur de boucles
  51. int         i;
  52.    // POUR chaque fiche
  53.    for (i = 0; i < A_nFiches; i++, A_lpFiches++)
  54.    {
  55.       // Recuperer le nom
  56.       printf("\nVeuillez saisir le nom : " );
  57.       scanf(NAMEENTRY, A_lpFiches->szNom);
  58.       fflush(stdin);
  59.       // Recuperer l'age
  60.       printf("Veuillez saisir l'age : " );
  61.       scanf("%d", &A_lpFiches->nAge);
  62.       fflush(stdin);
  63.       // Recuperer l'information
  64.       printf("Veuillez saisir l'information : " );
  65.       scanf(INFOENTRY, A_lpFiches->szInfo);
  66.       fflush(stdin);
  67.    }
  68.    // FIN POUR
  69. } // Fin Encoder()
  70. // Afficher les fiches
  71. void Afficher(int       A_nFiches,  // IN
  72.               LPFICHE   A_lpFiches) // IN
  73. {
  74. // Compteur de boucles
  75. int         i;
  76.    // POUR chaque fiche
  77.    for (i = 0; i < A_nFiches; i++, A_lpFiches++)
  78.    {
  79.       // Afficher le nom
  80.       printf("\n\nNom : %s", A_lpFiches->szNom);
  81.       // Afficher l'age
  82.       printf("\nAge : %d", A_lpFiches->nAge);
  83.       // Afficher l'information
  84.       printf("\nInfo : %s", A_lpFiches->szInfo);
  85.    }
  86.    // FIN POUR
  87. } // Fin Afficher()

mood
Publicité
Posté le 14-02-2005 à 14:18:20  profilanswer
 

n°981009
chrisbk
-
Posté le 14-02-2005 à 14:22:17  profilanswer
 

fflush(stdin);
 
tu vas te faire fouetter, toi [:zaib3k]
(tu ferais mieux de flusher stdout apres tes printf et avant tes scanf)

n°981033
podone
Posté le 14-02-2005 à 14:34:14  profilanswer
 

chrisbk a écrit :

fflush(stdin);
 
tu vas te faire fouetter, toi [:zaib3k]
(tu ferais mieux de flusher stdout apres tes printf et avant tes scanf)


 :??: Sans ca ne fonctionne pas, lis bien.   ;)

n°981039
chrisbk
-
Posté le 14-02-2005 à 14:37:21  profilanswer
 

fflush(stdin) n'a pas de comportement defini
par contre ton scanf apres ton printf, c'est un coup a pas voir le resultat de printf sur la console (d'ou le fflush(stdout))

n°981046
podone
Posté le 14-02-2005 à 14:40:51  profilanswer
 

Si ! si tu fais une saisie pour le nom du genre :
DUPONT 25 tu n'auras pas d'attente pour la saisie de l'age.

n°981052
chrisbk
-
Posté le 14-02-2005 à 14:42:39  profilanswer
 

http://www.google.fr/search?hl=fr& [...] n)&spell=1
 
je te laisse lire par toi meme [:petrus75]

n°981059
podone
Posté le 14-02-2005 à 14:47:46  profilanswer
 


Peut-être mais j'ai fait l'essai concluant dans les 2 cas de figure. Et je confirme.

n°981061
couak
Posté le 14-02-2005 à 14:49:01  profilanswer
 

podone a écrit :

Peut-être mais j'ai fait l'essai concluant dans les 2 cas de figure. Et je confirme.


on ne généralise pas à partir de 2 essais concluant

n°981062
chrisbk
-
Posté le 14-02-2005 à 14:49:13  profilanswer
 

bin qqpart, si tout le monde dit le contraire, c'est qu'il y a une raison non ? essaye en planquant un fflush(stdout) entre ton printf et ton scanf et tu verras bien

n°981063
couak
Posté le 14-02-2005 à 14:50:15  profilanswer
 

je parie qu'il va revenir sur le forum pour un problème de malloc() qui marchait chez lui mais pas à l'école :D
raahh c'est jeunes qui ne veulent pas comprendre la théorie avant de passer à la pratique ;)

mood
Publicité
Posté le 14-02-2005 à 14:50:15  profilanswer
 

n°981066
couak
Posté le 14-02-2005 à 14:51:17  profilanswer
 

moi en TP à l'école j'adorait entendre les gens "ca marchait chez moi et à l'école ca fait un seg fault ! ils sont pourris les PC de l'école"

n°981072
podone
Posté le 14-02-2005 à 14:57:57  profilanswer
 

chrisbk a écrit :

bin qqpart, si tout le monde dit le contraire, c'est qu'il y a une raison non ? essaye en planquant un fflush(stdout) entre ton printf et ton scanf et tu verras bien


Oui pour la portabilité tu as raison, tout dépend de l'implémentation de cette fonction qui est une extension au C standard
Extrait de MSN
// crt_fflush.c
#include <stdio.h>
#include <conio.h>
 
int main( void )
{
   int integer;
   char string[81];
 
   /* Read each word as a string. */
   printf( "Enter a sentence of four words with scanf: " );
   for( integer = 0; integer < 4; integer++ )
   {
      scanf( "%s", string );      
      // Security caution!
      // Beware allowing user to enter data directly into a buffer
      // without checking for buffer overrun possiblity.
      printf( "%s\n", string );
   }
 
   /* You must flush the input buffer before using gets. */
   fflush( stdin );   // fflush on input stream is an extension to the C standard
   printf( "Enter the same sentence with gets: " );
   gets( string );
   printf( "%s\n", string );
}

n°981093
nolimites
Z'avez pas vu Mirza?
Posté le 14-02-2005 à 15:13:19  profilanswer
 

je viens d'updater mon code et j'ai un petit problème lors de l'exécution. J'ai ajouter une nouvelle stucture index qui va me servir pour le tri. J'ai donc copié la valeur nom de la struct fiche vers la struct index, mais lors de l'affichage (qui fonctionnait pourtant avant) du nom de la struct fiche mon programme plante alors que je n'ai pas touché à cette partie de code  :??:  
 
Pqoi ca plante docteur?

n°981109
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-02-2005 à 15:21:08  profilanswer
 

nolimites a écrit :

je viens d'updater mon code e<...> Pqoi ca plante docteur?


Montre la dernière version de ton code ou donne une url...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°981112
nolimites
Z'avez pas vu Mirza?
Posté le 14-02-2005 à 15:21:48  profilanswer
 

Emmanuel Delahaye a écrit :

Montre la dernière version de ton code ou donne une url...


 
cf premiere page j'ai update mon post ;)

n°981127
podone
Posté le 14-02-2005 à 15:32:07  profilanswer
 

L'indice varie de 1 à n et non de 0 à n-1.

n°981131
nolimites
Z'avez pas vu Mirza?
Posté le 14-02-2005 à 15:35:41  profilanswer
 

podone a écrit :

L'indice varie de 1 à n et non de 0 à n-1.


 
 
hein???? :??:

n°981134
podone
Posté le 14-02-2005 à 15:39:16  profilanswer
 

Dans la boucle indice = j++ (donc commence a 1)
Il eut été préférable de n'utiliser qu'un compteur soit i
et faire indice = i;
En embarqué notamment cela permet d'économiser la pile.
Non c'est ok
indice = j++ commence bien a 0


Message édité par podone le 14-02-2005 à 15:44:09
n°981141
nolimites
Z'avez pas vu Mirza?
Posté le 14-02-2005 à 15:45:17  profilanswer
 

podone a écrit :

Dans la boucle indice = j++ (donc commence a 1)
Il eut été préférable de n'utiliser qu'un compteur soit i
et faire indice = i;
En embarqué notamment cela permet d'économiser la pile.
Non c'est ok
indice = j++ commence bien a 0


 
 
eu oui ok mais c tout de même pas ca qui fait planter mon soft :(

n°981168
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-02-2005 à 15:58:51  profilanswer
 

nolimites a écrit :

cf premiere page j'ai update mon post ;)


Ok. Ceci fonctionne. Bien lire mes commentaire (-ed-)


// struct.cpp : définit le point d'entrée pour l'application console.
//
 
/* -ed-  
 * Si tu fais du C, tu devrais utiliser l'extension .c  
 * et non .cpp (ni .C)  
 */
 
/* -ed-  
 
   #include "stdafx.h"
 
   * Gni ? Supprime.
   * Ajoute les headers manquants.
 */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
// Taille du nom
#define  NAMELENGTH     20
 
/* -ed-
 * inutile et faux (19 et non 20).  
 * Voir plus loin 'suppression de scanf()' ...
 
#define  NAMEENTRY      "%20s"
 
*/
 
// Taille de l'information
#define  INFOLENGTH     20
 
/*
#define  INFOENTRY      "%20s"
*/
 
// Structure fiche
typedef struct _FICHE
{
   char szNom[NAMELENGTH + 1];  // Nom
 
   int nAge;                    // Age
 
   char szInfo[INFOLENGTH + 1]; // Information
 
}
FICHE;
 
typedef FICHE *LPFICHE;
 
#if 0
/* -ed-  
 * Les prototypes separes sont rarement utiles dans une application  
 * mono fichier. Il suffit d'adopter le principe 'definir avant d'utiliser'.
 * Par contre ils ont leur place dans les fichier d'entetes des modules separes.
 * Suppression, reorganisation du code.
 */
// Encoder les fiches
void Encoder (int A_nFiches,    // IN
               LPFICHE A_lpFiches);  // OUT
 
// Afficher les fiches
void Afficher (int A_nFiches,   // IN
                LPFICHE A_lpFiches);  // IN
#endif
 
/* -ed-  
 * fonctions (a minima) ajoutees pour regler le problemes des I/O.  
 * Il est conseille de garder ses fonction sous le coude.  
 * Une version plus industrielle ici:
 
 http://mapage.noos.fr/emdel/clib.htm
 Module IO
 
 */
void get_s (char *s, size_t size)
{
   if (fgets (s, size, stdin) != NULL)
   {
      /* search */
      char *p = strchr (s, '\n');
      if (p != NULL)
      {
         /* kill */
         *p = 0;
      }
      else
      {
         /* clean */
         int c;
         while ((c = fgetc (stdin)) != '\n' && c != EOF)
         {
         }
      }
   }
}
 
int get_i (void)
{
   char s[16];
   get_s (s, sizeof s);
   return (int) strtol (s, NULL, 10);
}
 
 
// Encoder les fiches
void Encoder (int A_nFiches,    // IN
               LPFICHE const A_lpFiches)  // OUT
 {
// Compteur de boucles
   int i;
 
   // POUR chaque fiche
   for (i = 0; i < A_nFiches; i++)
   {
      /* -ed-  
       * Il est peu recommande de modifier un parametre.  
       * simplification du codage par pointeur intermediaire  
       */
      LPFICHE const p = A_lpFiches + i;
       
      // Recuperer le nom
      printf ("\nVeuillez saisir le nom : " );
       
      /* -ed-  
       * pour etre sur que les donnes vont sortir,  
       * vu que la ligne est incomplete...  
       */
      fflush (stdout);
       
      get_s (p->szNom, sizeof p->szNom);
 
      // Recuperer l'age
      printf ("Veuillez saisir l'age : " );
      fflush (stdout);
       
      p->nAge = get_i ();
 
      // Recuperer l'information
      printf ("Veuillez saisir l'information : " );
      fflush (stdout);
       
      get_s (p->szInfo, sizeof p->szInfo);
   }
   // FIN POUR
}                               // Fin Encoder()
 
// Afficher les fiches
void Afficher (int A_nFiches,   // IN
                LPFICHE const A_lpFiches)  // IN
 {
// Compteur de boucles
   int i;
 
   // POUR chaque fiche
   for (i = 0; i < A_nFiches; i++)
   {
      LPFICHE const p = A_lpFiches + i;
      // Afficher le nom
       
      /* -ed- La place du '\n' est en fin de ligne ... */
      printf ("\nNom : %s\n", p->szNom);
 
      // Afficher l'age
      printf ("Age : %d\n", p->nAge);
 
      // Afficher l'information
      printf ("Info : %s\n", p->szInfo);
   }
   // FIN POUR
 
}                               // Fin Afficher()
 
/* -ed-
   int _tmain(int argc, _TCHAR* argv[])
 
   * gni ? C'est quoi ca ? Pas du C en tout cas...  
   * parametres non utilises...  
 */
int main (void)
{
// Nombre de fiches
   int nFiches;
 
// Fiches
   LPFICHE lpFiches;
 
   // Recuperer le nombre de fiches
   printf ("\nVeuillez saisir le nombre de fiches : " );
/* -ed-  
   scanf("%d", &nFiches);
   fflush(stdin);
 
   * L'usage de scanf() est deconseille aux debutants.  
   * En fait peu de gens en maitrisent l'usage...
   * Ecrire ses fonctions I/O avec fgetc() ou fgets().
 */
   nFiches = get_i ();
 
   // Allouer la memoire pour les fiches
   /*    
      lpFiches = (LPFICHE) malloc (nFiches * sizeof (FICHE));
 
    * Une facon complique d'ecrire  
    */
   lpFiches = malloc (nFiches * sizeof *lpFiches);
 
/* -ed- malloc() peut echouer... Il manque un test. */
   if (lpFiches != NULL)
   {
      // Recuperer les fiches
      Encoder (nFiches, lpFiches);
 
      // Afficher les fiches
      Afficher (nFiches, lpFiches);
 
      // Desallouer la memoire
      free (lpFiches);
   }
   
   /* -ed- dev-C++... */
   system ("pause" );
   return 0;
}


et la sortie est :


Veuillez saisir le nombre de fiches : 2
 
Veuillez saisir le nom : aze
Veuillez saisir l'age : 12
Veuillez saisir l'information : azerty
 
Veuillez saisir le nom : qsd
Veuillez saisir l'age : 45
Veuillez saisir l'information : qsdfghjklm
 
Nom : aze
Age : 12
Info : azerty
 
Nom : qsd
Age : 45
Info : qsdfghjklm
Appuyez sur une touche pour continuer . . .



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°981171
chrisbk
-
Posté le 14-02-2005 à 16:00:21  profilanswer
 

(stdafx.h c'est pour les precompiled header de visual C++)

n°981177
nolimites
Z'avez pas vu Mirza?
Posté le 14-02-2005 à 16:03:51  profilanswer
 

Emmanuel Delahaye a écrit :

Ok. Ceci fonctionne. Bien lire mes commentaire (-ed-)


// struct.cpp : définit le point d'entrée pour l'application console.
//
 
/* -ed-  
 * Si tu fais du C, tu devrais utiliser l'extension .c  
 * et non .cpp (ni .C)  
 */
 
/* -ed-  
 
   #include "stdafx.h"
 
   * Gni ? Supprime.
   * Ajoute les headers manquants.
 */
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
// Taille du nom
#define  NAMELENGTH     20
 
/* -ed-
 * inutile et faux (19 et non 20).  
 * Voir plus loin 'suppression de scanf()' ...
 
#define  NAMEENTRY      "%20s"
 
*/
 
// Taille de l'information
#define  INFOLENGTH     20
 
/*
#define  INFOENTRY      "%20s"
*/
 
// Structure fiche
typedef struct _FICHE
{
   char szNom[NAMELENGTH + 1];  // Nom
 
   int nAge;                    // Age
 
   char szInfo[INFOLENGTH + 1]; // Information
 
}
FICHE;
 
typedef FICHE *LPFICHE;
 
#if 0
/* -ed-  
 * Les prototypes separes sont rarement utiles dans une application  
 * mono fichier. Il suffit d'adopter le principe 'definir avant d'utiliser'.
 * Par contre ils ont leur place dans les fichier d'entetes des modules separes.
 * Suppression, reorganisation du code.
 */
// Encoder les fiches
void Encoder (int A_nFiches,    // IN
               LPFICHE A_lpFiches);  // OUT
 
// Afficher les fiches
void Afficher (int A_nFiches,   // IN
                LPFICHE A_lpFiches);  // IN
#endif
 
/* -ed-  
 * fonctions (a minima) ajoutees pour regler le problemes des I/O.  
 * Il est conseille de garder ses fonction sous le coude.  
 * Une version plus industrielle ici:
 
 http://mapage.noos.fr/emdel/clib.htm
 Module IO
 
 */
void get_s (char *s, size_t size)
{
   if (fgets (s, size, stdin) != NULL)
   {
      /* search */
      char *p = strchr (s, '\n');
      if (p != NULL)
      {
         /* kill */
         *p = 0;
      }
      else
      {
         /* clean */
         int c;
         while ((c = fgetc (stdin)) != '\n' && c != EOF)
         {
         }
      }
   }
}
 
int get_i (void)
{
   char s[16];
   get_s (s, sizeof s);
   return (int) strtol (s, NULL, 10);
}
 
 
// Encoder les fiches
void Encoder (int A_nFiches,    // IN
               LPFICHE const A_lpFiches)  // OUT
 {
// Compteur de boucles
   int i;
 
   // POUR chaque fiche
   for (i = 0; i < A_nFiches; i++)
   {
      /* -ed-  
       * Il est peu recommande de modifier un parametre.  
       * simplification du codage par pointeur intermediaire  
       */
      LPFICHE const p = A_lpFiches + i;
       
      // Recuperer le nom
      printf ("\nVeuillez saisir le nom : " );
       
      /* -ed-  
       * pour etre sur que les donnes vont sortir,  
       * vu que la ligne est incomplete...  
       */
      fflush (stdout);
       
      get_s (p->szNom, sizeof p->szNom);
 
      // Recuperer l'age
      printf ("Veuillez saisir l'age : " );
      fflush (stdout);
       
      p->nAge = get_i ();
 
      // Recuperer l'information
      printf ("Veuillez saisir l'information : " );
      fflush (stdout);
       
      get_s (p->szInfo, sizeof p->szInfo);
   }
   // FIN POUR
}                               // Fin Encoder()
 
// Afficher les fiches
void Afficher (int A_nFiches,   // IN
                LPFICHE const A_lpFiches)  // IN
 {
// Compteur de boucles
   int i;
 
   // POUR chaque fiche
   for (i = 0; i < A_nFiches; i++)
   {
      LPFICHE const p = A_lpFiches + i;
      // Afficher le nom
       
      /* -ed- La place du '\n' est en fin de ligne ... */
      printf ("\nNom : %s\n", p->szNom);
 
      // Afficher l'age
      printf ("Age : %d\n", p->nAge);
 
      // Afficher l'information
      printf ("Info : %s\n", p->szInfo);
   }
   // FIN POUR
 
}                               // Fin Afficher()
 
/* -ed-
   int _tmain(int argc, _TCHAR* argv[])
 
   * gni ? C'est quoi ca ? Pas du C en tout cas...  
   * parametres non utilises...  
 */
int main (void)
{
// Nombre de fiches
   int nFiches;
 
// Fiches
   LPFICHE lpFiches;
 
   // Recuperer le nombre de fiches
   printf ("\nVeuillez saisir le nombre de fiches : " );
/* -ed-  
   scanf("%d", &nFiches);
   fflush(stdin);
 
   * L'usage de scanf() est deconseille aux debutants.  
   * En fait peu de gens en maitrisent l'usage...
   * Ecrire ses fonctions I/O avec fgetc() ou fgets().
 */
   nFiches = get_i ();
 
   // Allouer la memoire pour les fiches
   /*    
      lpFiches = (LPFICHE) malloc (nFiches * sizeof (FICHE));
 
    * Une facon complique d'ecrire  
    */
   lpFiches = malloc (nFiches * sizeof *lpFiches);
 
/* -ed- malloc() peut echouer... Il manque un test. */
   if (lpFiches != NULL)
   {
      // Recuperer les fiches
      Encoder (nFiches, lpFiches);
 
      // Afficher les fiches
      Afficher (nFiches, lpFiches);
 
      // Desallouer la memoire
      free (lpFiches);
   }
   
   /* -ed- dev-C++... */
   system ("pause" );
   return 0;
}


et la sortie est :


Veuillez saisir le nombre de fiches : 2
 
Veuillez saisir le nom : aze
Veuillez saisir l'age : 12
Veuillez saisir l'information : azerty
 
Veuillez saisir le nom : qsd
Veuillez saisir l'age : 45
Veuillez saisir l'information : qsdfghjklm
 
Nom : aze
Age : 12
Info : azerty
 
Nom : qsd
Age : 45
Info : qsdfghjklm
Appuyez sur une touche pour continuer . . .



 
 
eu oui c bien gentil tout ca mais c pas mon code ce machin c'est le truc de podone, je ne sais d'ailleur pas ce qu'il vient faire ici  :??:  
 
Pourrais tu checker mon code de premiere page stp merci :)

n°981198
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-02-2005 à 16:17:18  profilanswer
 

nolimites a écrit :

eu oui c bien gentil tout ca mais c pas mon code ce machin c'est le truc de podone, je ne sais d'ailleur pas ce qu'il vient faire ici


C'était peut être pas la peine de recopier mon code dans ta réponse.
 
Elague, le serveur n'a pas une taille infinie.

Citation :


Pourrais tu checker mon code de premiere page stp merci :)


oops,j'avais pas vu qu'il y avait 2 pages... Désolé.
Si j'ai le courage, je reprends ton code...
 
Ce code fonctionne:


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
 
/* -ed- retourne le nombre d'elements d'un tableau */
#define NELEM(a) (sizeof(a)/sizeof*(a))
 
struct FICHE
{
   char nom[20];
   int age;
   char info[50];
};
 
struct INDEX
{
   char nom[20];
   int indice;
 
};
 
 
/* -ed-  
 * fonctions (a minima) ajoutees pour regler le problemes des I/O.  
 * Il est conseille de garder ses fonction sous le coude.  
 * Une version plus industrielle ici:
 
 http://mapage.noos.fr/emdel/clib.htm
 Module IO
 
 */
void get_s (char *s, size_t size)
{
   if (fgets (s, size, stdin) != NULL)
   {
      /* search */
      char *p = strchr (s, '\n');
      if (p != NULL)
      {
         /* kill */
         *p = 0;
      }
      else
      {
         /* clean */
         int c;
         while ((c = fgetc (stdin)) != '\n' && c != EOF)
         {
         }
      }
   }
}
 
int get_i (void)
{
   char s[16];
   get_s (s, sizeof s);
   return (int) strtol (s, NULL, 10);
}
 
void encodage (int nbre_elem, struct FICHE *pt, struct INDEX *pt2)
{
 
   int i;
   for (i = 0; i < nbre_elem; i++)
   {
      printf ("------Fiche numero %d-----", i + 1);
 
      printf ("\n\nVeuillez saisir le nom: " );
      fflush (stdout);
      get_s (pt->nom, sizeof pt->nom);
 
      printf ("\nVeuillez saisir l'age: " );
      fflush (stdout);
      pt->age = get_i ();
 
      printf ("\nVeuillez saisir l'info: " );
      fflush (stdout);
      get_s (pt->info, sizeof pt->info);
 
      pt++;
 
      strcpy (pt2->nom, pt->nom);
      pt2->indice = i;
 
      pt2++;
   }
}
 
 
void affichage (int nbre_elem, struct FICHE const *pt, struct INDEX const *pt2)
{
   int i;
 
   for (i = 0; i < nbre_elem; i++)
   {
      printf ("------Fiche numero %d-----", i + 1);
 
      /* -ed- simplification... */
      printf ("nom: %s\n", pt->nom);
      printf ("age: %d\n", pt->age);
      printf ("info: %s\n", pt->info);
 
      pt++;
 
      printf ("------Vecteur index %d-----", i + 1);
      printf ("nom: %s\n", pt2->nom);
      printf ("age: %d\n", pt2->indice);
 
      pt2++;
   }
 
}
 
/* -ed- main() retourne int. Toujours. */
int main ()
{
 
   struct FICHE tab[50];
   struct INDEX tab2[NELEM (tab)];
   int nbre_elem;
 
   /* -ed- ajoute securite */
   do
   {
      printf ("Combien de fiches voulez vous encoder ? (1 a %u) :", NELEM (tab));
      fflush (stdout);
      nbre_elem = get_i ();
   }
   while (nbre_elem < 1 || nbre_elem > NELEM (tab));
 
   encodage (nbre_elem, tab, tab2);
   affichage (nbre_elem, tab, tab2);
 
   /* -ed- dev-C++... */
   system ("pause" );
 
   return 0;
}


Message édité par Emmanuel Delahaye le 14-02-2005 à 16:36:42

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°981369
podone
Posté le 14-02-2005 à 18:23:28  profilanswer
 

nolimites a écrit :

eu oui c bien gentil tout ca mais c pas mon code ce machin c'est le truc de podone, je ne sais d'ailleur pas ce qu'il vient faire ici  :??:  
 
Pourrais tu checker mon code de premiere page stp merci :)


Merci. Accueil sympa pour un nouveau sur le forum qui voulait juste te filer un coup de main.  :(

n°981436
nolimites
Z'avez pas vu Mirza?
Posté le 14-02-2005 à 19:33:53  profilanswer
 

podone a écrit :

Merci. Accueil sympa pour un nouveau sur le forum qui voulait juste te filer un coup de main.  :(


 
 
 :cry:  :cry:  :cry:
 
désolé mais je ne voulais pas blamer mais juste dire que j'avais un prob avec mon code car le tient est un poil trop long  :D  :p  
 
Mais je te remercie pr ton aide ;)
 
a tous d'ailleurs mon prob est réglé merci :)

n°981545
chrisbk
-
Posté le 14-02-2005 à 21:06:27  profilanswer
 

podone a écrit :

Merci. Accueil sympa pour un nouveau sur le forum qui voulait juste te filer un coup de main.  :(


 
oué mais oublie les fflush(stdin) s'il te plait :sweat:

n°983261
nolimites
Z'avez pas vu Mirza?
Posté le 16-02-2005 à 10:58:05  profilanswer
 

j'ai un problème dans l'évolution de monde. Pourriez vous donc encore me filer un petit coup de main s'il vous plait ca m'aiderait beaucoup ;)
 
Tout est expliqué ici http://forum.hardware.fr/hardwaref [...] 4487-1.htm :)
 
Merci d'avance  :hello:

n°990851
nolimites
Z'avez pas vu Mirza?
Posté le 23-02-2005 à 10:21:37  profilanswer
 

Vous voulez bien jeter un oeil la dessus svp ce serait sympa :)
merci :)
 
http://forum.hardware.fr/hardwaref [...] 4893-1.htm

n°990881
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-02-2005 à 10:43:55  profilanswer
 

nolimites a écrit :

Vous voulez bien jeter un oeil la dessus svp ce serait sympa :)
merci :)
 
http://forum.hardware.fr/hardwaref [...] 4893-1.htm


 

  • Tu dois apprendre à lire l'anglais. C'est simple et indispensable.
  • strcmp() attend des adresses de chaines de caractères. Tu lui passes une valeur de caractère. C'est incohérent.
  • L'opérateur de comparaison est '==' et non '='
  • 'pt_pos' est un pointeur. Pour modifier la valeur pointée, il faut utiliser l'opérateur '*' (déréférencement).
  • Il ne faut pas utiliser gets(). C'est un bug.


http://mapage.noos.fr/emdel/notes.htm#saisie
 

  • fflush(stdin) n'est pas défini.
  • main() retourne int. Toujours...


http://mapage.noos.fr/emdel/notes.htm#typemain
 
etc.
 


Message édité par Emmanuel Delahaye le 23-02-2005 à 10:54:58

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°990946
nolimites
Z'avez pas vu Mirza?
Posté le 23-02-2005 à 11:16:11  profilanswer
 

Emmanuel Delahaye a écrit :

  • Tu dois apprendre à lire l'anglais. C'est simple et indispensable.
  • strcmp() attend des adresses de chaines de caractères. Tu lui passes une valeur de caractère. C'est incohérent.
  • L'opérateur de comparaison est '==' et non '='
  • 'pt_pos' est un pointeur. Pour modifier la valeur pointée, il faut utiliser l'opérateur '*' (déréférencement).
  • Il ne faut pas utiliser gets(). C'est un bug.


http://mapage.noos.fr/emdel/notes.htm#saisie
 

  • fflush(stdin) n'est pas défini.
  • main() retourne int. Toujours...


http://mapage.noos.fr/emdel/notes.htm#typemain
 
etc.


 
merci pour les infos je vais mater ca. Je suis bilingue donc je sais parfaitement ce qu'il me dit mais je ne comprend pas nécessairement d'ou venais mes fautes. Mais je vais voir ce que tu me conseils :)

n°1864288
Echapp
Posté le 21-03-2009 à 02:46:04  profilanswer
 

salut je suis nouveau ici  
vraiment je c pas quoi dire j'ai fait un inscription spécialement pour se juste j'ai copié ton code dans le compilateur devc++  
j'ai enlevé void de la fonction main puis j'ai ajouté a la fin  la getch() et return(0) sa marche tés très bien exécution très normal  je c est pas ou et le problème mon ami !!!!

Code :
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3.   #include<conio.h>
  4.    #include<string.h>
  5.  
  6.   void affichage(int, struct FICHE *, struct INDEX *);
  7.   void encodage(int, struct FICHE *, struct INDEX *);
  8.   void tri();
  9.    void insertion();
  10.   struct FICHE
  11.   {
  12.    char nom[20];
  13.    int age;
  14.   char info[50];
  15.   };
  16. struct INDEX
  17. {
  18. char nom[20];
  19. int indice;
  20. };
  21.    void encodage(int nbre_elem, struct FICHE *pt, struct INDEX *pt2)
  22. {
  23.   int i,j=0;
  24. for(i=0;i<nbre_elem;i++)
  25. {
  26.     printf("------Fiche numero %d-----",i+1);
  27.   printf ("\n\nVeuillez saisir le nom: " );
  28.   fflush(stdin);
  29.   gets(pt->nom);
  30. printf ("\nVeuillez l'age: " );
  31.   fflush(stdin);
  32.   scanf ("%d",&pt->age);
  33.    printf ("\nVeuillez saisir l'info: " );
  34.    fflush(stdin);
  35.   gets(pt->info);
  36.    pt++;
  37.     strcpy (pt2->nom,pt->nom);
  38.   pt2->indice = j++;
  39.    pt2++;
  40.   }
  41.    }
  42.   void affichage(int nbre_elem, struct FICHE *pt, struct INDEX *pt2)
  43. {
  44. int i;
  45. for(i=0;i<nbre_elem;i++)
  46. {
  47.    printf("------Fiche numero %d-----",i+1);
  48.   printf ("\nnom: " );
  49.     puts (pt->nom);
  50.   printf ("age: %d",pt->age);
  51.   printf ("\ninfo: " );
  52.    puts (pt->info);
  53.     pt++;
  54.   printf("------Vecteur index %d-----",i+1);
  55.   printf ("\nnom: " );
  56.   puts (pt2->nom);
  57.    printf ("age: %d",pt2->indice);
  58. pt2++ ;
  59. }
  60.   }
  61.    void tri()
  62.    {
  63. }
  64.   void insertion()
  65.   {
  66.   }
  67.    main()
  68. {
  69.   struct FICHE tab[50], * pt;
  70.   struct INDEX tab2[50], * pt2;
  71.    int nbre_elem;
  72. pt = &tab[0];
  73.   pt2 = &tab2[0];
  74.    printf ("Combien de fiches voulez vous encoder? : " );
  75. scanf ("%d", &nbre_elem);
  76. encodage(nbre_elem,pt,pt2);
  77. affichage(nbre_elem,pt,pt2);
  78. getch();
  79. return(0);
  80. }


n°1864299
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-03-2009 à 09:18:32  profilanswer
 

Echapp a écrit :

salut je suis nouveau ici  

[:arrakys]  
Déterrage d'un topic de 2005 ? On en a brûlé pour moins que ça...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
problème après compilation...Probleme avec structure
Problème XHTML/CSSProblème texte dynamique
Problème de typage de pointeur de pointeur[J2ME] probleme de code réseau
[php] Probleme de conception - sessions/cookie&coEst-il possible de positionner automatiquement le pointeur de souris ?
[C] probleme structure et pointeur 
Plus de sujets relatifs à : Problème avec pointeur dans une structure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR