我正在尝试弄清文件处理方式,但我只是想不出一种解决方法。任何帮助,将不胜感激! 需要这样的东西:
#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
答案 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*
表示创建的文件为预期的