C Файл очищен, но не отредактирован - PullRequest
0 голосов
/ 19 апреля 2020

Я хотел создать простую базу данных, используя два файла, поместив имя в первый файл («Name_database») и поместив деньги во второй файл («Money_database»), но у меня есть ошибка, которая возникает, когда я закрываю оба файла, чтобы вставить новый текст один закройте и откройте заново, чтобы взять новый текст, а другой не сделайте то же самое, другой файл закроется и не займет новый текст для вставки

#include <stdlib.h>
#include <string.h>

#define Max_Name_Chars 20
#define Max_Accounts 100

char Name_Array[Max_Accounts][Max_Name_Chars];
int Money_Array[Max_Accounts];
int NumberOfElements ;


void getDatabasesData (FILE* Name_Database , FILE* Money_Database);
int getPlayerIndexFromName(char Name [Max_Name_Chars]);
void setDataAtDatabase (FILE* Name_Database , FILE* Money_Database , char Name [Max_Name_Chars] , int Money );
void saveDataBase(FILE* Name_Database , FILE* Money_Database);


int main()
{
    FILE* Name_Database = fopen("Name_Database.txt", "a+");
    FILE* Money_Database = fopen("Money_Database.txt", "a+");

    setDataAtDatabase(Name_Database,Money_Database,"Big",50000);

    fclose(Name_Database);
    fclose(Money_Database);
    return 0;
}



void getDatabasesData (FILE* Name_Database , FILE* Money_Database)
{
    NumberOfElements = 0;
    // Add to Name_Array
    while(fgets(Name_Array[NumberOfElements], Max_Accounts, Name_Database)) {
        Name_Array[NumberOfElements][strlen(Name_Array[NumberOfElements]) - 1] = '\0';
        NumberOfElements++;
    }

    // Add to Money_Array
    for (int i = 0; i < NumberOfElements; i++)
    {
        fscanf(Money_Database, "%d,", &Money_Array[i] );
    }
}

int getPlayerIndexFromName(char Name [Max_Name_Chars])
{
    for (int i = 0 ; i < NumberOfElements ; i++)
    {
        if (strcmp(Name_Array[i],Name) == 0)
        {
            return i;
        }
    }
    return -1;
}

void setDataAtDatabase (FILE* Name_Database , FILE* Money_Database , char Name [Max_Name_Chars] , int Money )
{
    getDatabasesData(Name_Database, Money_Database);

    int Database_Player_Index = getPlayerIndexFromName(Name);

    if (Database_Player_Index == -1)
    {
        strcpy(Name_Array[NumberOfElements],Name);
        Money_Array[NumberOfElements] = Money;
        NumberOfElements++;

        //printf("%s %d",Name_Array[NumberOfElements],Money_Array[NumberOfElements]);
    } else {
        Money_Array[Database_Player_Index] = Money;

        //printf("%s %d",Name_Array[Database_Player_Index],Money_Array[Database_Player_Index]);
    }

    saveDataBase(Name_Database,Money_Database);
}

void saveDataBase(FILE* Name_Database , FILE* Money_Database)
{
    fclose(fopen("Name_Database.txt", "w"));
    fclose(fopen("Money_Database.txt", "w"));

    for (int i = 0 ; i < NumberOfElements ; i++)
    {
        fprintf(Name_Database,"%s\n",Name_Array[i]);
        fprintf(Money_Database,"%d ",Money_Array[i]);
    }
}

My First file text:

Большой Big2

Мой второй текст файла: 5000 1000

1 Ответ

0 голосов
/ 19 апреля 2020

Спасибо всем, я исправил это глупым способом, я, guss, я все равно опубликую это в случае, если кто-то также попадет в эту проблему.

void saveDataBase(FILE* Name_Database , FILE* Money_Database)
{
fclose(Name_Database);
fclose(Money_Database);

remove("Name_Database.txt");
remove("Money_Database.txt");

Name_Database = fopen("Name_Database.txt", "a+");
Money_Database = fopen("Money_Database.txt", "a+");

for (int i = 0 ; i < NumberOfElements ; i++)
{
    fprintf(Name_Database,"%s\n",Name_Array[i]);
    fprintf(Money_Database,"%d ",Money_Array[i]);
}

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