【发布时间】:2020-08-01 06:07:23
【问题描述】:
我想知道是否可以从 txt 文件中获取字符串和 int 并放入 2D 数组,以便稍后使用该 2D 数组编辑文件。
我的代码:
#include <stdlib.h>
#include <string.h>
#define Max_Name_Chars 20
#define Max_Accounts 100
#define Max_Chars_Per_Account 100
void getDataBaseText(FILE* Database,char * Array_Name_Money[Max_Accounts][2]);
void saveDataBase(FILE* Database,char * Array_Name_Money[Max_Accounts][2], int Line_Counter);
void setDataAtDatabase(FILE* Database,char Name[Max_Name_Chars], int Money);
int main()
{
FILE* Database = fopen("Database.txt", "a+");
setDataAtDatabase(Database,"Big",100);
fclose(Database);
return 0;
}
void getDataBaseText(FILE* Database,char * Array_Name_Money[Max_Accounts][2])
{
int Charcters;
int Line_Counter = 0;
int Char_Index = 0;
int SwitchIndex = 0;
while ( (Charcters = getc(Database) ) != EOF)
{
printf("%d",Char_Index);
if (Charcters == '\n') {
Line_Counter++;
Char_Index = 0;
SwitchIndex = 0;
continue;
} else if (Charcters == ':') {
Char_Index = 0;
SwitchIndex = 1;
continue;
}
Array_Name_Money[Line_Counter][SwitchIndex][Char_Index] = Charcters;
Char_Index++;
}
}
void setDataAtDatabase(FILE* Database,char Name[Max_Name_Chars], int Money)
{
char * Array_Name_Money[Max_Accounts][2];
getDataBaseText(Database,Array_Name_Money);
int Line_Counter;
int FoundName = 0;
for (Line_Counter = 0 ; Array_Name_Money[Line_Counter][0][0] ;Line_Counter++ )
{
//printf("%s\n",Array_Name_Money[Line_Counter][0]);
if (strcmp(Name,Array_Name_Money[Line_Counter][0]) ==0 )
{
FoundName = Line_Counter;
break;
}
}
char DataBase_Money[Max_Chars_Per_Account];
sprintf(DataBase_Money, "%d", Money);
if (FoundName)
{
Array_Name_Money[FoundName][1] = DataBase_Money;
} else {
Array_Name_Money[Line_Counter][0] = Name;
Array_Name_Money[Line_Counter][1] = DataBase_Money;
}
saveDataBase(Database,Array_Name_Money,Line_Counter);
}
void saveDataBase(FILE* Database,char * Array_Name_Money[Max_Accounts][2], int Line_Counter)
{
fclose(fopen("Database.txt", "w"));
for(int i = 0 ; i <= Line_Counter ; i++)
{
fprintf(Database,"%s:%s",Array_Name_Money[i][0],Array_Name_Money[i][1]);
if (i != Line_Counter)
fprintf(Database,"\n");
}
}
我的问题是在函数“getDataBaseText”中它没有从 txt 文件中获取完整的字符,因为它只需要“Big:1”
我的txt文件:Big:100
如果名称不存在,我想做的只是获取一个字符串和 int 并将其放在文件中,但如果名称确实存在,所以我想在 txt 文件中设置一个新的货币值,我已经搜索过从文件中获取二维数组,但是有像我这样的问题。
【问题讨论】:
-
您尝试写入没有附加内存的字符串;
char *本身只是一个没有附加存储的指针。Array_Name_Money未初始化并且将具有不确定的内容。而且我认为您不应该直接对文件进行数据库操作。在开始时将数据加载到数组中,根据需要检查和修改数据,然后再次将更改提交到文件。处理内存中的数据要容易得多。 -
OT: about:
FILE* Database = fopen("Database.txt", "a+");调用fopen()时,始终检查 (!=NULL) 返回值以确保操作成功。如果不成功,拨打perror( "fopen failed" );然后拨打exit( EXIT_FAILURE );
标签: c string file multidimensional-array