从txt文件读入char数组的结构数组,需要帮助

时间:2013-12-10 16:41:43

标签: c++ file-io arrays

我刚刚在我的uni中使用了C ++,我们必须制作一个电话簿程序,它使用txt文件作为联系人的输入/输出。 我的问题是,在重新启动程序后,(Ergo,将结构数组刷新到文件中并将其读回。)结构填充不正确。名称char数组保留为空,地址采用name-value,电话号码数组尝试获取地址。我必须在名称数组中存储名字和姓氏,用空格分隔,并将完整地址存储到它的char数组中。

ifstream ifile;
ifile.open("phonebook.txt");

while(ifile.peek()!=EOF)
{
    string temp;
    ifile>>b[a].id;
    getline(ifile, temp);
    for(int i = 0;i < temp.length();i++)
        b[a].name[i] = temp[i];
    temp.clear();
    getline(ifile, temp);
    for(int g = 0;g < temp.length();g++)
        b[a].address[g] = temp[g];
    temp.clear();
    ifile>>b[a].number;
    a++;
}

ifile.close();

结构定义为:

struct derp
{
    int id;
    char name[25];
    char address[25];
    char number[10];
};

derp b[100];

虽然我知道使用字符串更好,而且更容易,但如果可能的话,我想用char数组来做。

编辑: 文本文件目前只是一个测试/占位符:

1
Todor Penchev
Sevlievo, BG
0854342387

1 个答案:

答案 0 :(得分:0)

读取一个数字并没有消除额外的换行符,所以你需要额外的getline来摆脱它们。

    fstream ifile;
    ifile.open("phonebook.txt");
    a = 0;
    while(ifile.peek()!=EOF)
    {
        string temp;
        ifile>>b[a].id;
        cout << "Id=:" << b[a].id << endl;
        getline(ifile, temp); // Read end of line
        getline(ifile, temp);
        cout << "name=:" << temp << endl;
        for(int i = 0;i < temp.length();i++)
            b[a].name[i] = temp[i];
        temp.clear();
        getline(ifile, temp);
        cout << "address=:" << temp << endl;
        for(int g = 0;g < temp.length();g++)
            b[a].address[g] = temp[g];
        temp.clear();
        ifile>>b[a].number;
        getline(ifile, temp); // Read end of line
        cout << "number=:" << b[a].number << endl;
        cout << b[a].id << endl << b[a].name << endl << b[a].address << endl << b[a].number << endl;
        a++;
    }

    ifile.close();