首页 > 解决方案 > 如何将修改后的数组保存到文件中

问题描述

所以我创建了一个保存在文件中的数组。我在文件中将数字 4 打印了 100 次。现在,每次访问数组中的一个元素时,它的值都会减少 1。因此,如果访问 A[1] = 4,那么它将变为 A[1] = 3 并保存在文件中。问题是我无法将修改后的数组保存到文件中。

我已经尝试移动 FILE 指针的位置。

void buildingB4()
{
    system("CLS");
    FILE *input, *output;
    int i, B4[100], room;

    input = fopen("B4.txt", "r");
    if (input == NULL)
    {
        output = fopen("B4.txt", "w");
        for (i = 1; i <= 100; i++)
        {
            B4[i] = 4;
            fprintf(output, "%d\n", B4[i]);
        }
        fclose(output);
        for (i = 1; i <= 100; i++)
        {
            if (i % 10 == 0)
            {
                printf("\n\n");
            }
            printf("B-4-%d(%d)\t", i, B4[i]);
        }
    }
    else
    {

        for (i = 1; i <= 100; i++)
        {
            fscanf(input, "%d\n", &B4[i]);
            if (i % 10 == 0)
            {
                printf("\n\n");
            }
            printf("B-4-%d(%d)\t", i, B4[i]);
        }
        fclose(input);
        printf("\nPlease choose a room:B-4-");
        scanf("%d", &room);
        B4[room] = B4[room] - 1;
        output = fopen("B4.txt", "a");
        fprintf(output, "%d\n", B4[i]);
        studentDetails();
    }
}

假设 A[1] = 4 并且当用户输入为 1 时,1 保存在名为 room 的变量中。所以 A[room] = A[room] -1 所以结果是 A[1] = 3 并且它修改了保存在文件中的 A[1]。

标签: carrays

解决方案



我在您的代码中发现了一些小错误,这是您的固定代码:

#define HOME_SIZE 100
void show_rooms(int B[]){
    for (int i = 0; i < HOME_SIZE; i++){
            if (i % 10 == 0){
                printf("\n\n");
            }
            printf("B-4-%3d(%d) ", i + 1, B[i]);
        }
}
void buildingB4()
{
    FILE *input, *output;
    input = fopen("B4.txt", "r");
    unsigned int B[HOME_SIZE], room;
    if (input == NULL){
        fclose(input);
        // Setting all homes to 4.
        for (int i = 0; i < HOME_SIZE; ++i){
            B[i] = 4;
        }
        output = fopen("B4.txt", "w");
        for(int i = 0; i < HOME_SIZE; ++i)
            fprintf(output, "%d\n", B[i]);
        fclose(output);
        show_rooms(B);
    }
    else{
        for (int i = 0; i < HOME_SIZE; ++i){
            fscanf(input, "%d", &B[i]);
        }
        fclose(input);
        show_rooms(B);
        printf("\nPlease choose a room:B-4-");
        scanf("%d", &room);
        if (room > 0 && room <= HOME_SIZE)
            B[room - 1] -= 1;
        output = fopen("B4.txt", "w");
        for(int i = 0; i < HOME_SIZE; ++i)
            fprintf(output, "%d\n", B[i]);
    }
}

请注意:

  • 在 C 中,索引从 0 而不是 1 开始。
  • 工作后关闭使用文件,以便正确保存。
  • 不要对 scanf 使用 '%d\n' 格式,它会自动忽略 ' ' 和 '\n' 。

未来发展提示:

  • 尝试使用feof函数来了解您的文件是否结束,而不是使用恒定大小作为输入。

推荐阅读