Как сохранить измененный массив в файл - PullRequest
0 голосов
/ 01 июня 2019

Итак, я создал массив, который сохраняется в файле.У меня есть номер 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 [комната] = A [комната] -1, поэтому результатом будет A [1] = 3, и это изменит A [1], сохраненный в файле.

Ответы [ 2 ]

0 голосов
/ 01 июня 2019


Я обнаружил небольшие ошибки в вашем коде, и вот ваш фиксированный код:

#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.
  • закройте файл после вашей работы, чтобы сохранить его правильно.
  • Не используйте формат "% d \ n" для scanf, он будет игнорировать "" и "\ n'автоматически.

Советы по дальнейшему развитию:

  • Попробуйте использовать функцию feof , чтобы узнать, закончился ли ваш файл или нет, вместо использования постоянного размерадля ваших входов.
0 голосов
/ 01 июня 2019

Использовать fclose после строки fprintf (вывод, "% d \ n", B4 [i]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...