How to use index in the file name

前端 未结 4 1540
迷失自我
迷失自我 2021-01-24 09:12

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

相关标签:
4条回答
  • 2021-01-24 09:31

    Use sprintf to generate the filename.

    char buf[80];
    sprintf(buf,"file%d", i);
    fopen(buf,"w");
    

    Array syntax in C uses square brackets [].

    0 讨论(0)
  • 2021-01-24 09:37

    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");
    
    0 讨论(0)
  • 2021-01-24 09:44

    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:

    • Use sprintf to create the name of the file. In C there is not a concatenate operator of strings.
    • You don't need to create an array of file pointers.
    • And of course, this may be improved: handling the size of the filename, padding the numbers, etc.
    0 讨论(0)
  • 2021-01-24 09:48

    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.

    0 讨论(0)
提交回复
热议问题