【发布时间】:2014-05-18 16:58:55
【问题描述】:
所以我有一个我正在做的项目,我创建了一个允许用户写入文件的程序,如下所示:
#include <stdio.h>
#include <stdlib.h>
FILE *fd;
FILE *fw;
struct store
{
char Word[512];
char NWord[512];
}
stock;
struct store2
{
char Definition[512];
}
stock2;
char done='y';
int count=1;
int c=0;
int d=0;
int main(void)
{
fw=fopen("Test Z W.txt","w");
fd=fopen("Test Z D.txt","w");
do
{
printf("Word %d: ",count);
gets(stock.Word);
while((c= getchar()) != '\n' && c != EOF);
printf("Definition %d: ",count);
gets(stock2.Definition);
while((c= getchar()) != '\n' && c != EOF);
fprintf(fw,"%s\n", stock.Word);
fprintf(fd,"%s\n", stock2.Definition);
count=count+1;
system("cls");
}
while (count<11);
fclose(fd);
fclose(fw);
return 0;
}
这段代码很好,但是,我想扩展它,以便可以选择只编辑一个选定的行,而不是擦除整个文件并再次写入所有内容。
我要做的就是使用 How do you write to a specific line of a txt file in C?
这不是很有帮助,因为我无法获取答案并将其导入我的代码,无论哪种方式,我所需要的只是可以轻松修复如下错误的东西。
1
2
Three
4
5
6
7
8
9
10
将自动询问用户他们想要编辑哪一行。
【问题讨论】:
-
文件不是字符串列表,它们是字符列表。您不能轻易地用较短或较长的字符串“替换”单个字符串。如果您不想重写整个文件,则需要一个故障安全系统来在修改后读取/重写所有内容。这比简单地重写整个文件要困难得多(而且容易出错)。
-
之前的回答是没有用的,因为你想做的事情在今天基本上和当时一样不可能。
-
问题是我不能要求一个词并且改变它,它必须是一行。
-
那么,为什么明显的答案(重写文件)也是一个问题?
-
是的,这是几乎你必须做的。文件系统中没有魔法可以让你说“我想把这一行放在中间,你介意扩展文件并为我把它后面的所有东西都推下来吗?”你必须自己做。 @MrSykkox,即使在他寻找之后,如果新行的长度与他要替换的长度不同,他将覆盖旧行或留下一些奇怪的间隙。
标签: c string file text structure