【发布时间】:2021-08-09 10:25:02
【问题描述】:
我正在尝试使用结构数组执行一些操作,例如添加、删除、追加数据到 C 语言的文件中。 这是我的结构。
struct S_info
{
char title[50];
char sName[50];
int rMm;
int rDd;
int rYy;
int rating;
bool deleteSong;
};
而且我能够使用结构将数据添加到文件中。这是添加数据的代码。
for (int i = 0; i < n; i++)
{
printf("Title: ");
scanf("%s", &title);
printf("\nName of the Song: ");
.....................
strcpy(s[i].title, title);
strcpy(s[i].sName, sName);
s[i].rMm = rMm;
...........
fwrite(&s[i], sizeof(struct S_info), 1, outfile);
}
但问题是,每当我添加新数据时,以前的数据都会从文件中删除。因此,我需要创建一个函数,该函数将使用结构数组将新数据附加到文件中。我还想创建另一个将删除的函数。
为了删除数据我尝试了一种方法,我在结构中创建了一个布尔变量来帮助我删除数据。但我不喜欢代码。 我在互联网上搜索使用结构附加数据,但我没有找到任何好的解决方案,删除数据也发生了同样的事情。 我需要的是使用结构数组将新数据追加和删除到文件中。
【问题讨论】:
-
当使用
%s格式扫描字符串时,您应该不需要参数的地址运算符&。实际上,取决于例如的类型。title,使用&title可能会导致崩溃。 -
至于你的问题,
outfile文件怎么打开?您是否以纯写入模式打开它,该模式会截断(擦除)文件中的现有数据?还是在追加模式下将新数据追加到文件中?还是处于读写模式? -
@Someprogrammerdude 这是我打开文件的方式:outfile = fopen ("songs.dat", "w");这就是我尝试添加数据的方式: fwrite (&s[i], sizeof(struct S_info), 1, outfile);
-
@POKA 以追加模式打开文件:fopen("songs.dat", "a");
-
请阅读一些关于
fopen及其开放模式字符串的信息。使用"w",您可以删除文件的所有现有内容(这也是任何体面的初学者书籍、课程或教程都应该提到的内容)。
标签: arrays c file file-io structure