C ++-从文本文件读入矢量错误

时间:2018-07-29 16:09:53

标签: c++ file vector io

我正在尝试从 Scores.txt 读取到我的Player向量中。使用以下代码。

std::ifstream fin;
std::string alo;
int al;
Player* p = new Player;
std::vector<Player*> mPlayer;
fin.open("Scores.txt");
while (fin.good()) {
    fin >> alo >> al;
    p->setName(alo);
    p->setScore(al);
    mPlayer.push_back(p);
}

我的文本文件如下:

Ali        25
Reza       101
Igor        18
Katie       20
Jacky        18
macky        20

但是,在输出myPlayer向量之后,我得到以下结果:

macky        20
macky        20
macky        20
macky        20
macky        20
macky        20

2 个答案:

答案 0 :(得分:2)

您一直在设置相同的Player实例。您需要每次创建新的Player并设置其资源。可以这样做:

while (fin.good()) {
    Player* p = new Player;  // -------> here
    fin >> alo >> al;
    p->setName(alo);
    p->setScore(al);
    mPlayer.push_back(p);
}

但是,您最好只使用std::vector<Player> mPlayer,因为它也会在堆中创建

如果您确实需要指针,可以使用std::vector<std::unique_ptr<Player>> mPlayer而不是原始指针(read about smart pointers here)

答案 1 :(得分:1)

我刚刚为您的问题写了一个工作版本。最重要的区别是循环内分配了多个Player。 这是您的代码的有效版本:

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <vector>

class Player
{
private:
    std::string name;
    unsigned int score;
public:
    void setName(std::string tosetName)
    {
        name = tosetName;
    }
    void setScore(unsigned int tosetScore)
    {
        score = tosetScore;
    }
};

int main()
{
    std::ifstream fin;
    std::string alo;
    int al;
    std::vector<Player*> mPlayer;
    fin.open("Scores.txt");
    while (fin.good()) 
    {
        Player* p = new Player;
        fin >> alo >> al;
        p->setName(alo);
        p->setScore(al);
        mPlayer.push_back(p);

    }   
    return 0;
}