创建一个询问用户名称的程序,并创建10个文件,这些文件的名称使用C进行序列化

时间:2019-05-16 14:40:01

标签: c string file

我正在尝试弄清文件处理方式,但我只是想不出一种解决方法。任何帮助,将不胜感激! 需要这样的东西:

#include<stdio.h>
int main()
{
        char string[10];
        FILE *fp1;

        printf("Enter the string");
        scanf("%s", string);

        fp1 = fopen(string, "w");


        /---- 


        fclose(fp1);
        return 0;
}

我不知道如何获取序列化的文件:( 我以为可以制作10个FILE * fptr,然后这样做,但是idk如何获取序列化的部分

布鲁诺的解决方案似乎正在起作用。

#include<stdio.h>
#include<string.h>
int main()
{
        char string[10];
        FILE* fp[10];


        printf("Enter the string");
        scanf("%s", string);

        char fn[sizeof(string)+8];


        for(int i=0; i<=10; i++){
                sprintf(fn, "%s%d", string, i);
                if((fp[i] = fopen(fn, "w")) == 0)
                        printf("Cannot open %s\n", fn);
        }


        for(int i=0; i<=10; i++){
                fclose(fp[i]);
        }
        return 0;
This seems to be working. Thanks

应该是这样的:

输入:

Give me a name: Test

输出:

Created Test1.txt, Test2.txt, Test3.txt, .... Test10.txt

1 个答案:

答案 0 :(得分:0)

只要做类似的事情

#include<stdio.h>
#include <assert.h>

#define N 10

int main()
{
  assert((N >= 0) && (N <= 999)); /* check the value of N if it is changed */

  char base[10]; /* the base name of the files */
  FILE *fp[N]; /* to save the file descriptors */

  printf("Enter the base name:");
  if (scanf("%9s", base) != 1)
    // EOF
    return -1;

  char fn[sizeof(base) + 7]; /* will contains the name of the files */

  for (int i = 0; i != N; ++i) {
    sprintf(fn, "%s%d.txt", base, i+1);
    if ((fp[i] = fopen(fn, "w")) == 0)
      printf("cannot open %s\n", fn);
  }

  /* ... */

  for (int i = 0; i != N; ++i) {
    if (fp[i] != NULL)
      fclose(fp[i]);
  }

  return 0;
}

我将 fn 的大小设置为比 base 多7个字符,这是因为有关N( assert )的限制,允许3个数字“ .txt”的4个字符

scanf("%9s", ..)允许输入基本名称,将其限制为9个字符,与 base 的大小兼容(10个也可以放置以空字符结尾的字符串)

sprintf 类似于 printf ,但除了在 stdout 上打印结果(将结果放在第一个参数字符串中)之外。请注意,每次在 fn 中的 base 中都进行重写时,将不会进行任何优化。

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra f.c
pi@raspberrypi:/tmp $ echo aze*
aze*
pi@raspberrypi:/tmp $ ./a.out
Enter the base name:aze
pi@raspberrypi:/tmp $ echo aze*
aze10.txt aze1.txt aze2.txt aze3.txt aze4.txt aze5.txt aze6.txt aze7.txt aze8.txt aze9.txt
pi@raspberrypi:/tmp $ 

在执行echo aze*之前生成aze*,因为没有文件以 aze 开头的文件,在执行aze*表示创建的文件为预期的