This is probably trivial question. I am not a professional programmer, I am rather a mathematician who is doing some numerical experiment using C. I would like the output of my
Use sprintf
to generate the filename.
char buf[80];
sprintf(buf,"file%d", i);
fopen(buf,"w");
Array syntax in C uses square brackets []
.
In C, use snprintf:
char buf[PATH_MAX];
snprintf(buf, sizeof(buf), "file%d", i);
If you use linux, there is a useful GNU extension:
char *name;
asprintf(&name. "file%d", i);
You need to remember to free(name) after use.
Note that your syntax FILE *f(i);
is not valid though.
If you need to declare an array of FILE * of 10 elements do:
FILE *array[10];
then use it like that:
array[i] = fopen(filename, "W");
You could try this:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i = 0;
for (i = 0; i < 10; i++) {
char filename[64];
sprintf(filename, "file%d", i);
FILE *fp = fopen(filename, "w");
fprintf(fp, "%d\n", i);
fclose(fp);
}
return 0;
}
Your code is almost ok. Some observations:
sprintf
to create the name of the file. In C there is not a concatenate operator of strings.You can just build a string up with sprintf
. Make sure your buffer is large enough:
char filename[20];
sprintf( filename, "file%d", i );
Then you can open it like this:
FILE *f = fopen( filename, "w");
...
fclose(f);
No need to use an array (if that's what you were trying to do with f(i)
), because you're only keeping one file open at a time.
If you want your files to be text-sortable, you might want file001
, file002
etc... You can use %03d
instead of %d
to 0-pad to 3 digits.