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 q q 1
1001 w w 2
1002 e e 3
1003 r r 4
1004 t t 5
这是调试器为文件中的第一行显示的内容:
http://i.imgur.com/uRGeuvj.png
有人能看出它有什么问题吗? 它应该是1000是记录,q代表fname,q代表lname,1代表phonenum(代表第一行)。我所做的就是将每一行存储在结构实例(数据)中,然后将其存储到稍后要使用的向量中。
答案 0 :(得分:3)
inFile >> recordstring
不消耗尾随空格,因此第一个getline()调用返回一个空字符串,因为它消耗的第一个字符是空格。
答案 1 :(得分:3)
如果您想逐字逐句地阅读文件,请留在>>
。如果您想逐行阅读,请使用std::getline
,但不要以这种方式混合使用这两者。
char recordstring[4]
std::cin >> recordstring
int
atoi
醇>
...虽然简单的>>
用于填充int
类型的变量。请注意,recordstring
的大小为4,大小足以容纳3个字符+空终止'\0'
实际上整个阅读可能很简单:
vector<data> myData;
data d;
while(inFile >> d.record >> d.fName >> d.lName >> d.phoneNum) {
myData.push_back(d);
}
答案 2 :(得分:1)
如果文件格式如图所示是固定的,只需执行以下操作: -
while(inFile >> datas.record >> datas.fName >> datas.lName >> datas.phoneNum)
myData.push_back(datas);
您的逻辑似乎跳过recordstring