【发布时间】:2021-12-16 02:09:41
【问题描述】:
我想实现以下目标: 我必须在具有以下结构的文件(例如txt)中管理数据库:X,X,X,X,X 在这个数据库中,我希望能够修改一行,当我在代码中编写要更改的行时,它可以完美地工作。 但是我希望能够在运行程序期间编写该行。 重要提示:当你写一个行值时,你必须放一个 .到最后不过那。不会进入文件。 此外,您不知道输入的长度。 这有效: 在 Main 中,值是预先给出的:
char file[50];
scanf("%s",file);
char tmp[]="temp.txt";
char a[]="2,2,2,2,2";
char b[]="9,9,9,9,9";
javitas(file,tmp,a,b); // this will modify the line a to b in the file
程序:
#define sorhossz 500
void javitas(char filename1[], char filename2[], const char *str, const char *replace) {
FILE *in = fopen(filename1,"r+");
FILE *out = fopen(filename2,"w+");
size_t strl;
char line[sorhossz];
strl = strlen(str);
while (fgets(line, sizeof(line), in)) {
char *y, *x = line;
while ((y = strstr(x, str))) {
fwrite(x, 1, y - x, out);
fputs(replace, out);
x = y + strl;
}
fputs(x, out);
}
rewind(out);
rewind(in);
while (fgets(line, sizeof(line), out))
{
char *x = line;
fputs(x, in);
}
fclose(in);
fclose(out);
}
但我想在运行期间以某种方式在 Main 中给出“a”和“b”:
char a[50]; // 50 is a random number I was triing with
char b[50];
printf("Give the line you want to modify\n");
scanf("%[^.]%*c",a);
printf("Give the line you want to modify to\n");
scanf("%[^.]%*c",b);
javitas(file,tmp,a,b);
当我尝试从输入中给出值时,我会写“2,2,2,2,2”。对于 a 和“9,9,9,9,9”。对于 b。别忘了 .是不成串。之后,我可以在程序中打印这些字符串,所以我猜程序理解输入值,但是它不会将文件中的“a”行修改为“b”行。 你能帮忙吗?
这是一个我正在测试的文件:(我将其命名为 qqq.txt 但没关系)
9,9,9,9,9
hel,az,de,5,k
0
ennyi,annyi,amannyi,helo,ot 22
1,2,3,4,5
1,2,2,2,3
ez,az vegre, sikerult, 3 sort illeszteni, a fileba
peti,egy,kiraly,helo,5om, 5 helo 5, 5 ezaz
egy,ketto,harom,negy,ot
helo,helo,lusta,vagyok,irni
meg,egyszer,hatha,most,sikerul
1,2,3,4,5
1,2,3,4,5
1,2,3,4,5
1,1,1,1,1
2,2,2,3,3
helo,belo,ize,de,4
如果文本文件没有退出,它将在菜单之前创建。 很抱歉在这里和那里都是匈牙利人,但我希望主要的事情是可以理解的。
【问题讨论】:
-
“但这根本不起作用” 这为猜测这可能意味着什么留下了相当大的空间。请具体说明什么不起作用。你提供什么作为输入,你期望什么,你会得到什么?
-
您的问题是关于将字符串传递给函数,但在将输入字符串传递给函数之前,您是否确认输入字符串看起来正常?
-
@Gerhardh 当我尝试从输入中给出值时,我写“2,2,2,2,2”。对于 a 和“9,9,9,9,9”。对于 b。别忘了 .是不成串。之后,我可以在程序中打印这些字符串,所以我猜程序理解输入值,但是它不会将文件中的“a”行修改为“b”行。
-
请将此重要信息添加到问题中,而不是在 cmets 中。
-
如果我理解正确,如果您将字符串定义为
main中的文字,但如果您使用来自用户输入的字符串则不行。这意味着在将值传递给您的函数时出现问题的可能性极小。你的输入有问题。您是在 a 和 b 之后按 enter 还是将两者都添加到同一行?在第一种情况下,我希望您在b中有一个领先的\n。