gpt4 book ai didi

创建一个程序,要求用户输入名称并使用 C 创建 10 个名称序列化的文件

转载 作者:行者123 更新时间:2023-11-30 21:05:10 26 4
gpt4 key购买 nike

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

#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 然后执行它,但我不知道如何获取序列化部分

布鲁诺的解决方案似乎有效。

#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

最佳答案

就做类似的事情

#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* 表示创建的文件是预期的

关于创建一个程序,要求用户输入名称并使用 C 创建 10 个名称序列化的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56171113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com