1
`#include <iostream>
#include <fstream>

using namespace std;


// user struct
struct userInfo {
    string username;
    string firstName;
    string lastName;
    string favTVshow;

}; 

// create text file with each person's information
void dataBase(){
    ofstream dataFile("db.txt");

dataFile << "8\ngboss\nGriffin\nBoss\nHow I Met Your Mother\nechill\nEdwina\nCarol\nGossip Girl\nestone\nEmma\nStone\nScrubs\njcasablancas\nJulian\nCasablancas\nLost\nrobflew\nRob\nFlewelling\nWorkaholics\ncwoodsum\nCam\nWoodsum\nGlee\nrydogfav\nRyan\nFavero\nHomeland\nfishmans\nSam\nFishman\nEntourage\n";

     dataFile.close();
}

// read in database text file to an array
void dataBase_toArray(){
    userInfo userArray[8]
    string line;
    int loop = 0;

ifstream dataFile("db.txt");

if (dataFile.is_open()){
    while (getline(dataFile,line))
    {
        userArray[loop].username = line;
        userArray[loop].firstName = line;
        userArray[loop].lastName = line;
        userArray[loop].favTVshow = line;
        cout << userArray[loop].username << endl;
        loop++;
    }
    dataFile.close();
}
else cout << "Can't open file" << endl;

}

// main function
int main() {

userInfo userArray[8];

dataBase();
dataBase_toArray();



}

所以这是我试图在这个文本文件中读入一个结构数组的代码。但是,当我尝试计算每个用户的用户名时,它不起作用。它只是打印出我的文本文件的前 8 行。我该如何解决这个问题,让它将文本输入到结构数组中,然后只输出 8 个用户中每个用户的用户名?

提前致谢!

4

2 回答 2

0

我假设文件中的第一行(“8”)是用户数:

int n;
dataFile >> n;
for (int i = 0; i < n; ++i)
{
    getline(dataFile,line);
    userArray[loop].username = line;
    getline(dataFile,line);
    userArray[loop].firstName = line;
    getline(dataFile,line);
    userArray[loop].lastName = line;
    getline(dataFile,line);
    userArray[loop].favTVshow = line;
    cout << userArray[loop].username << endl;
    loop++;
}
于 2013-03-10T07:32:38.427 回答
0

你的问题出在这里:

while (getline(dataFile,line))
{
    userArray[loop].username = line;
    userArray[loop].firstName = line;
    userArray[loop].lastName = line;
    userArray[loop].favTVshow = line;
    cout << userArray[loop].username << endl;
    loop++;
}
dataFile.close();

您收到这些错误的原因是您只准备了一次线路,因此 , 和 的值username被分配给运行 getline 时存储的相同值。firstnamelastnamefavTVshow

我提出以下建议(这有点让人想起 C 的 fscanf):

while (getline(dataFile,line1) && getline(dataFile, line2) && getline(dataFile, line3) && getline(dataFile, line4))
{
    userArray[loop].username = line1;
    userArray[loop].firstName = line2;
    userArray[loop].lastName = line3;
    userArray[loop].favTVshow = line4;
    ++loop;
}

在哪里:

string line;

已被替换为:

string line1, line2, line3, line4;

这样,它确保成功读取了四行(这是结构中元素的数量),并且每行都被分配了值,现在可以正确地分配给结构数组中的每个元素。

现在,理想情况下,这不是最好的方法 -你可以使用向量等,但从你的问题集中,我将它保持在相同的格式。

于 2013-03-10T07:34:27.657 回答