>> FILE *fp
>> FILE *fp2
Why not make that an array of FILE* ?
FILE* fp[20] = { 0 };
>> file1
>> file2
>> file3
Why not use sprintf (or something similar) ?
char filename[64] = "";
sprintf(filename, "file%d", index);
where 'index' is the number of the file (1, 2, etc.)