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>());
}