gpt4 book ai didi

c - 在C中,关闭程序数据库时无法更新

转载 作者:行者123 更新时间:2023-11-30 16:11:14 24 4
gpt4 key购买 nike

我创建了一个文件,希望在程序结束时用该值更新,然后在下次程序运行时再次从该文件中读取该值。

例如:在这个程序中,我想从保存的值中减去输入的值。所以首先我输入 3,然后它给出 12。当我再次运行程序并输入 2 时,它给出 13,但它应该给出 10 而不是 13。

#include<stdio.h>

#define PATH "/tmp/file"

int main()
{
FILE *file;
int age=15,s;

scanf("%d",&s);
file = fopen(PATH, "w");
age = age - s;
fprintf(file, "%d", age);
fclose(file);
file = fopen(PATH,"r");
if (file == NULL)
{
printf("files does not exist");
}
fscanf(file,"%d",&age);
printf("%d",age);
fclose(file);
}

最佳答案

问题是您总是将年龄初始化为 15 岁,而不是文件中的年龄。然后您将该年龄写入文件,并立即读回。

如果我理解正确的话,您想先读取文件(而不是覆盖它),然后进行计算,然后将结果写回。

#include<stdio.h>

#define PATH "/tmp/file"

int main()
{
FILE *file;
int age = 15, s;

file = fopen(PATH, "r");
if (file == NULL)
{
printf("files does not exist");
return 1;
}
fscanf(file, "%d", &age);
fclose(file);

scanf("%d", &s);

file = fopen(PATH, "w");
age = age - s;
fprintf(file, "%d", age);
fclose(file);

printf("%d", age);
}

请注意,您还应该对写入进行错误处理,而不仅仅是读取。如果文件系统已满或者您没有写入权限,写入可能会失败。

不过,您的错误处理尚未完成:在您的代码中,您打印了一条错误消息,但仍然继续。访问无效的文件指针(即 NULL)将使您的程序因段错误而崩溃。我添加了一个 return 语句,但您也可以将其余逻辑放在 else block 中。

关于c - 在C中,关闭程序数据库时无法更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58661155/

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