| 12
 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
 
 |  
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
typedef struct
{
   char name[30];
   char address[30];
}
record;
 
/* -ed-
record readfile (FILE * sf, record company)
 
Horrible ! Meme si c'est techniquement possible,
  on ne passe pas une structure en entier. On ne passe que son adresse... ;
 
void readfile (FILE * sf, record *p_company)
 
ou
 
si on gere un code retour...
  */
int readfile (FILE * sf, record * p_company)
{
   int err = 0;
   int n;
   n = fscanf (sf, "%s", p_company->name);
 
   err = n != 1;
   if (!err)
   {
      fprintf (stdout, "%s\n", p_company->name); /* ca marche pour cette ligne */
      n = fscanf (sf, "%29[^\n]", p_company->address);
      printf ("n=%d\n", n);
      fprintf (stdout, "%s", p_company->address); /* celle-la non */
/* -ed-
   fputs (company.address.sf);
ceci n'a aucun sens. Tu voulais peut etre dire
 
   fputs (company.address,sf);
 
mais ce n'est pas mieux, car sf est un fichier ouvert en lecture...
 
Ce que tu veux est :
*/
      fputs (p_company->address, stdout);
   }
   else
   {
      perror ("");
   }
 
/* -ed- parentheses inutiles...
   return (company);
*/
   return err;
}
 
int main (int argc, char *argv[])
{
/* -ed- revision de l'algorithme... */
   char fname[30];
   if (argc != 2)
   {
      fprintf (stdout, "please specify a filename : ");
/* -ed- fonction interdite !
utiliser fgets() et nettoyer correctement.*/
      gets (fname);
   }
   else
   {
/* -ed- Eek ! fname n'est jamais initialise... */
/*
   if ((fp = fopen (fname, "r")) == NULL)
*/
      strcpy (fname, argv[1]);
   }
 
   {
      FILE *fp = fopen (fname, "r");
      if (fp != NULL)
      {
         record company;
         readfile (fp, &company);
 
         fclose (fp);
      }
      else
      {
         perror (fname);
      }
   }
   return 0;
} | 
Partager