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
   | 
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# include <ctype.h>
void createfile(char []);
static FILE *sf; // Ces globales ne sont pas justifiées . A éviter absolument!
static char fname[30];
static char com[81];
int parser (void) {
  int n = 0;
  char buffer [ 81 ], arg[50][9];
  if ( ( sf = fopen ( fname, "r" ) ) == NULL ) {
    fprintf ( stderr, "MAKELIST: Unable to open %s!\n", fname );
    exit ( 1 );
    }
  fgets ( buffer, 81, sf );
  while ( ! feof ( sf ) ) {
    //fputs ( buffer, stdout );
    if (strcmp(arg[n],"add")){ // la chaîne arg[n] n'est pas initialisée pour n =0
        sscanf(buffer, "%s %s\n", arg[n], arg[n]+strlen(arg[n]));
         // strlen(arg[n]) n'est pas signifiant à l'entrée de la fonction puique arg[n] n'est rempli qu'à la sortie de la fonction!
// De plus ca n'a aucun sens d'aller écrire à cette adresse
        }
    sscanf(buffer, "%s\n", arg[n]);
    char *p;
    p = arg[n]+strlen(arg[n]); // idem, cette adresse n'a pas de sens
    if (arg[n] != NULL && !p){ // arg[n] et p sont != NULL, c'est sur
        printf("%s\n", arg[n]);
        }
    if (arg[n] != NULL && p){
        printf("%s %s\n", arg[n], arg[n]+strlen(arg[n])); // idem
        }
    fgets ( buffer, 81, sf );
    n++;
    }
    fclose ( sf );
  return 0;
}
int newfile ( )
{
  printf ("\n\tPlease, specify a filename: " );
  gets(fname); // ne pas utilier gets mais fgets sur le flux stdin  createfile(fname);
  return 0;
}
void createfile(char file[]){
   sf = fopen(file, "w");
   if ( sf != NULL ) {
      printf("\n\tFile \"%s\" created.\n", file);
      printf("\n\tEnter commands : \n");
      fclose (sf);
      }
}
void append(){
   sf = fopen(fname,"a");
   if ( sf != NULL ) {
       fprintf(sf, "%s\n", com);
       fclose(sf);
       }
}
int main (void) {
 printf("Enter commands : \n");
 while ( strcmp(com, "quit") != 0 ) {
   printf("\t >  ");
   gets(com);
   if (sf == NULL) {
      printf("\n\tError, no script file detected.\n ");
      newfile();
      }
     append();
   }
  parser();
return 0;
} | 
Partager