【问题标题】:C How to take String and Int from file and put at 2D ArrayC如何从文件中获取String和Int并放入二维数组
【发布时间】: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


【解决方案1】:

建议:

从文件中输入一整行,可能使用大缓冲区和函数:fgets( largeBuffer, sizeof largeBuffer, fp) 其中'fp'是来自fopen()的文件指针

然后使用strtok( buffer, ":") 获取指向前导字符串的“令牌”指针

然后使用if( strcmp( token, "Big" ) == 0 )检查当前行是否是感兴趣的行

如果当前行是感兴趣的行

然后使用strtok( NULL, ":") 得到一个指向数值的“token”指针

然后使用sscanf( token, "%d", &amp;number )将数字保存到int变量中

【讨论】:

    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2018-09-04
    • 2012-04-12
    • 2021-12-12
    相关资源
    最近更新 更多