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