1
struct data
{
 int record;
 string fName;
 string lName;
 string phoneNum;
};

string line, lastname, firstname, phone;

vector<data> readContent()
{
 inFile.open("data.txt");
 vector<data> myData;
 char recordstring[4];
 data datas;

 inFile.clear();
 while(inFile >> recordstring)
 {  
    int records;
    records = atoi(recordstring);
    datas.record  = records;
    getline(inFile, firstname, ' ');
    datas.fName = firstname;
    getline(inFile, lastname, ' ');
    datas.lName = lastname;
    getline(inFile, phone, '\n');
    datas.phoneNum = phone;
    myData.push_back(datas);
 }
 inFile.close();
 return myData;
}

这是输入文件(data.txt):

1000 qq 1
1001 ww 2
1002 ee 3
1003 rr 4
1004 tt 5

这是调试器在文件的第一行显示的内容:

http://i.imgur.com/uRGeuvj.png

谁能看到它有什么问题?
它应该是 1000 作为记录,q 代表 fname,q 代表 lname,1 代表 phonenum(第一行)。我所做的只是将每一行存储在一个结构实例(数据)中,然后将其存储到一个向量中以供以后使用。

4

3 回答 3

3

inFile >> recordstring不使用尾随空格,因此第一个 getline() 调用返回一个空字符串,因为它使用的第一个字符是空格。

于 2013-10-09T17:29:27.213 回答
3

如果要逐字读取文件,请使用>>. 如果您想逐行阅读,请使用std::getline,但不要以这种方式混合这两者。

另请注意,您有:
  1. 宣布char recordstring[4]
  2. 尝试使用初始化它std::cin >> recordstring
  3. 试图将其转换为int使用atoi

...虽然简单>>地用于填充类型的变量int就可以了。注意 的大小recordstring为 4,足以容纳 3 个字符 + 以 null 结尾'\0'

实际上整个阅读可以很简单:

vector<data> myData;

data d;
while(inFile >> d.record >> d.fName >> d.lName >> d.phoneNum) {  
    myData.push_back(d);
}
于 2013-10-09T17:30:56.227 回答
1

如果文件格式如图所示固定,只需执行以下操作:-

while(inFile >> datas.record >> datas.fName >> datas.lName >> datas.phoneNum)
   myData.push_back(datas);

您的逻辑似乎跳过了空格recordstring

于 2013-10-09T17:27:37.860 回答