让我们考虑一个场景,其中基于第一行数据从文件中读取一行作为结构返回,
并根据第一行数据更新文件内容,即第二行数据。
有两个函数可以独立工作,但是从读取函数返回结构后更新函数不起作用。
因此,更新函数中使用的两个文件的重命名和删除的返回值为 -1。如果没有返回 structre,或者换句话说,如果我们注释掉从文件中读取的数据,那么更新函数就可以正常工作,并且重命名和删除的返回值都是 0。
尽管这些功能彼此独立,但插入功能如何影响更新功能?
#include <stdio.h>
#include <stdlib.h>
struct structure
{
int one;
int second;
};
struct structure *read_row_from_file(int column_one_data);
void update_row_on_File(int column_one_data, int updated_value);
int main()
{
struct structure *myInstance = read_row_from_file(3);
update_row_on_File(3, 33);
return 0;
}
struct structure *read_row_from_file(int column_one_data)
{
struct structure *instance = malloc(sizeof(struct structure));
int num_one, num_two;
FILE *fp = fopen("example.txt", "r");
while (fscanf(fp, "%d %d", &instance->one, &instance->second) != -1)
{
if (instance->one == column_one_data)
return instance;
}
fclose(fp);
return NULL;
}
void update_row_on_File(int column_one_data, int updated_value)
{
int num_one, num_two;
FILE *fp = fopen("example.txt", "r");
FILE *fpc = fopen("example_copy.txt", "w");
while (fscanf(fp, "%d %d", &num_one, &num_two) != -1)
{
if (num_one == column_one_data)
fprintf(fpc, "%d %d\n", num_one, updated_value);
else
fprintf(fpc, "%d %d\n", num_one, num_two);
}
fclose(fp);
fclose(fpc);
int removeValue = remove("example.txt");
int renameValue = rename("example_copy.txt", "example.txt");
printf("\nremove value : %d | rename value: %d", removeValue, renameValue);
}
输出是
删除值:-1 | 重命名值:-1
example.txt文件如下:
1 10
2 20
3 30
4 40
5 50
6 60
example_copy.txt文件如下:
1 10
2 20
3 33
4 40
5 50
6 60
所需的更新存在于example_copy.txt中;
但是没有删除example.txt并将example_copy.txt重命名为example.txt。