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
|
#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