C++ 如何在c++;
嗨,我正在尝试填充我创建的类对象的数组。输入来自文本文件。文本文件包含字符串和数字。我得到的第一组信息,但其余的文件将不会阅读,任何想法将不胜感激C++ 如何在c++;,c++,file,class,ifstream,C++,File,Class,Ifstream,嗨,我正在尝试填充我创建的类对象的数组。输入来自文本文件。文本文件包含字符串和数字。我得到的第一组信息,但其余的文件将不会阅读,任何想法将不胜感激 class mess { private: string name; float age, weight, height; public: void setname(string a) {name=a;}
class mess
{
private:
string name;
float age, weight, height;
public:
void setname(string a) {name=a;}
void setage(float b){age=b;}
//etc.
string getname(){return name;}
float getage(){return age;}
//etc.
}
ifstream input;
input.open("test.txt");
mess people[2]
string str;
float num;
for(inti=0; i<2; i++)
{
getline(input,str,'\n');
people[i].setname(str);
input >> num;
people[i].setage(num);
input >> num;
people[i].setweight(num);
input >> num;
people[i].setheight(num);
}
for(inti=0; i<2; i++)
{
cout << people[i].getname() << endl;
cout << people[i].getage() << endl;
cout << people[i].getweight() << endl;
cout << people[i].getheight() << endl;
}
类混乱
{
私人:
字符串名;
漂浮年龄、体重、身高;
公众:
void setname(字符串a){name=a;}
无效设置(浮动b){age=b;}
//等等。
字符串getname(){return name;}
float getage(){return age;}
//等等。
}
ifstream输入;
input.open(“test.txt”);
混乱的人[2]
字符串str;
浮点数;
对于(inti=0;i>num;
人[i].设置数(num);
输入>>num;
人[i]。设定体重(num);
输入>>num;
人[i]。设置高度(num);
}
对于(inti=0;i而言,这里的问题是,当您使用输入运算符>
时,它将在第一条记录的最后一个数字之后保留换行符。这意味着下一个getline
调用将该换行符作为空行读取,然后这些数字将无法读取
有两种方法可以解决这个问题。第一种方法是在读取记录中的最后一个数字后,在换行之前丢弃输入中的所有文本
// All other input in loop
input.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
还要注意的是,to的第三个参数已经默认为换行符,因此,如果您使用它来读取行,则不需要提供它。这里的问题是,当您使用输入运算符>
时,它将在第一条记录的最后一个数字之后保留换行符。这意味着下一个getline
调用将将该换行符作为空行读取,则数字将无法读取
有两种方法可以解决这个问题。第一种方法是在读取记录中的最后一个数字后,在换行之前丢弃输入中的所有文本
// All other input in loop
input.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
还要注意的是,to的第三个参数已经默认为换行符,因此,如果您使用它来读取行,则不需要提供它。这里的问题是,当您使用输入运算符>
时,它将在第一条记录的最后一个数字之后保留换行符。这意味着下一个getline
调用将将该换行符作为空行读取,则数字将无法读取
有两种方法可以解决这个问题。第一种方法是在读取记录中的最后一个数字后,在换行之前丢弃输入中的所有文本
// All other input in loop
input.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
还要注意的是,to的第三个参数已经默认为换行符,因此,如果您使用它来读取行,则不需要提供它。这里的问题是,当您使用输入运算符>
时,它将在第一条记录的最后一个数字之后保留换行符。这意味着下一个getline
调用将将该换行符作为空行读取,则数字将无法读取
有两种方法可以解决这个问题。第一种方法是在读取记录中的最后一个数字后,在换行之前丢弃输入中的所有文本
// All other input in loop
input.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
还要注意的是,to的第三个参数已经默认为换行符,因此如果您使用它来读取行,则不需要提供它。我建议您在类中重载运算符
:
class mess
{
private:
string name;
float age, weight, height;
public:
void setname(string a) {name=a;}
void setage(float b){age=b;}
//etc.
string getname(){return name;}
float getage(){return age;}
//etc.
friend std::istream& operator>>(std::istream& inp, mess& m);
friend std::ostream& operator<<(std::ostream& out, const mess& m);
}
std::istream& operator>>(std::istream& inp, mess& m)
{
std::getline(inp, m.name);
inp >> m.age;
inp >> m.weight;
inp >> m.height;
return inp;
}
std::ostream& operator<<(std::ostream& out, const mess& m)
{
out << m.name << endl;
out << m.age << endl;
out << m.weight << endl;
out << m.height << endl;
return out;
}
类混乱
{
私人:
字符串名;
漂浮年龄、体重、身高;
公众:
void setname(字符串a){name=a;}
无效设置(浮动b){age=b;}
//等等。
字符串getname(){return name;}
float getage(){return age;}
//等等。
friend std::istream&operator>>(std::istream&inp、mess&m);
friend std::ostream&operator(std::istream&inp、mess&m)
{
std::getline(inp,m.name);
inp>>m.age;
inp>>m.重量;
inp>>米高度;
返回inp;
}
std::ostream&operator我建议你在课堂上重载operator
:
class mess
{
private:
string name;
float age, weight, height;
public:
void setname(string a) {name=a;}
void setage(float b){age=b;}
//etc.
string getname(){return name;}
float getage(){return age;}
//etc.
friend std::istream& operator>>(std::istream& inp, mess& m);
friend std::ostream& operator<<(std::ostream& out, const mess& m);
}
std::istream& operator>>(std::istream& inp, mess& m)
{
std::getline(inp, m.name);
inp >> m.age;
inp >> m.weight;
inp >> m.height;
return inp;
}
std::ostream& operator<<(std::ostream& out, const mess& m)
{
out << m.name << endl;
out << m.age << endl;
out << m.weight << endl;
out << m.height << endl;
return out;
}
类混乱
{
私人:
字符串名;
漂浮年龄、体重、身高;
公众:
void setname(字符串a){name=a;}
无效设置(浮动b){age=b;}
//等等。
字符串getname(){return name;}
float getage(){return age;}
//等等。
friend std::istream&operator>>(std::istream&inp、mess&m);
friend std::ostream&operator(std::istream&inp、mess&m)
{
std::getline(inp,m.name);
inp>>m.age;
inp>>m.重量;
inp>>米高度;
返回inp;
}
std::ostream&operator我建议你在课堂上重载operator
:
class mess
{
private:
string name;
float age, weight, height;
public:
void setname(string a) {name=a;}
void setage(float b){age=b;}
//etc.
string getname(){return name;}
float getage(){return age;}
//etc.
friend std::istream& operator>>(std::istream& inp, mess& m);
friend std::ostream& operator<<(std::ostream& out, const mess& m);
}
std::istream& operator>>(std::istream& inp, mess& m)
{
std::getline(inp, m.name);
inp >> m.age;
inp >> m.weight;
inp >> m.height;
return inp;
}
std::ostream& operator<<(std::ostream& out, const mess& m)
{
out << m.name << endl;
out << m.age << endl;
out << m.weight << endl;
out << m.height << endl;
return out;
}
类混乱
{
私人:
字符串名;
漂浮年龄、体重、身高;
公众:
void setname(字符串a){name=a;}
无效设置(浮动b){age=b;}
//等等。
字符串getname(){return name;}
float getage(){return age;}
//等等。
friend std::istream&operator>>(std::istream&inp、mess&m);
friend std::ostream&operator(std::istream&inp、mess&m)
{
std::getline(inp,m.name);
inp>>m.age;
inp>>m.重量;
inp>>米高度;
返回inp;
}
std::ostream&operator我建议你在课堂上重载operator
:
class mess
{
private:
string name;
float age, weight, height;
public:
void setname(string a) {name=a;}
void setage(float b){age=b;}
//etc.
string getname(){return name;}
float getage(){return age;}
//etc.
friend std::istream& operator>>(std::istream& inp, mess& m);
friend std::ostream& operator<<(std::ostream& out, const mess& m);
}
std::istream& operator>>(std::istream& inp, mess& m)
{
std::getline(inp, m.name);
inp >> m.age;
inp >> m.weight;
inp >> m.height;
return inp;
}
std::ostream& operator<<(std::ostream& out, const mess& m)
{
out << m.name << endl;
out << m.age << endl;
out << m.weight << endl;
out << m.height << endl;
return out;
}
类混乱
{
私人:
字符串名;
漂浮年龄、体重、身高;
公众:
void setname(字符串a){name=a;}
无效设置(浮动b){age=b;}
//等等。
字符串getname(){return name;}
float getage(){return age;}
//等等。
friend std::istream&operator>>(std::istream&inp、mess&m);
friend std::ostream&operator(std::istream&inp、mess&m)
{
std::getline(inp,m.name);
inp>>m.age;
inp>>m.重量;
inp>>米高度;
返回inp;
}
std::ostream&operator我将定义操作符
int main()
{
std::ifstream f("data");
// OK.
// A vector is not actually an array.
// But you can use the same principle with a manual loop.
// as std::istream_iterator is just a normal iterator.
std::vector<M> data(std::istream_iterator<M>(f), std::istream_iterator<M>());
}