我想从文件中读取两件事,全名(名字和姓氏) 和年龄。之后我想将它们存储在一个数组中然后打印数据。 但是,当我尝试读取第一条记录时,读取查找,但其他两条都没有。 请告诉我我错过了什么。 谢谢。
该文件的内容是:
sampleFirst1 sampleLast1
30
sampleFirst2 sampleLast2
25
sampleFirst3 sampleLast3
40
输出是:
Name: sampleFirst1 Age: 30
Name: Age: 30
Name: Age: 30
这是我的代码:
#include "Person.h"
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream inputFile("data.txt", ios::in);
string full_name;
int age = 0;
int i = 0;
Person personArray[3];
while (i < 3)
{
getline(inputFile, full_name);
personArray[i].set_name(full_name);
inputFile >> age;
personArray[i].set_age(age);
++i;
}
inputFile.close();
printData(personArray, 3);
cout << endl;
return 0;
}
答案 0 :(得分:1)
您不应该以这种方式混合getline
和>>
运算符。喜欢这样一个更简单的代码:
#include <iostream>
#include <fstream>
#include <array>
#include <string>
using namespace std;
struct Person {
std::string name;
int age;
void set_name(std::string const& i_name) { name = i_name; }
void set_age(int i_age) { age = i_age; }
};
int main()
{
ifstream inputFile("data.txt", ios::in);
std::string first;
std::string last;
int age = 0;
int i = 0;
std::array<Person,3> personArray;
while (i < personArray.size()) {
inputFile >> first >> last >> age;
personArray[i].set_name(first + " " + last);
personArray[i].set_age(age);
++i;
}
inputFile.close();
for(Person const& person : personArray) {
std::cout << "Name: " << person.name << " Age: " << person.age << "\n";
}
std::cout << std::flush;
return 0;
}
如果您不想为全名支付字符串连接额外费用,请仅使用getline
和istringstream
来限制年龄。
可以说很多解析方法,但这不是重点。