指针麻烦和将信息读入数组

时间:2018-02-16 22:35:57

标签: c++

尝试将一些值读入动态分配的数组时,我遇到了一些问题。一切看起来都没问题,但是当代码运行时,只显示数组的最后一个条目。代码如下。如果你能给我一些建议我会很感激。

ifstream infile;
infile.open("MovieStatistics.txt");

int numOfStudents = 0;
string first, last, line;
int movies;

int *numMovies = nullptr;
string *names = nullptr;

if (!infile) {
    cout << "Error opening file";
} else {
    while (getline(infile, line)) {
        numOfStudents++;
        stringstream ss(line);
        ss >> first >> last >> movies;
    }

    numMovies = new int[numOfStudents];
    names = new string[numOfStudents];
}

for (int i = 0; i < numOfStudents; i++) {
    names[i] = first + " " + last;
    numMovies[i] = movies;
}

2 个答案:

答案 0 :(得分:0)

所以你循环遍历文件,反复将数据读入firstlastmovies - 每次都覆盖以前的值。

很久以后,您获取这些变量的当前值,并将其写入动态数组numOfStudents次。

您可能想要回放流并再次循环遍历文件,以便您可以提取所有数据;你第一次没有真正存储过每个样本。

答案 1 :(得分:0)

您的问题是您在读取循环中分配firstlast但是您没有将值存储在数组或向量中,因此它们包含最后的值。

要使其正常工作,您可以将代码编辑为:

ifstream infile;
infile.open("data.txt");

int numOfStudents = 0;
string first, last, line;
int movies;

int *numMovies = nullptr;
string *names = nullptr;

// get the number of students
while (getline(infile, line))
    numOfStudents++;

numMovies = new int[numOfStudents];
names = new string[numOfStudents];

// clear the buffer
infile.clear();
infile.seekg(0, ios::beg);

int i = 0;
while(getline(infile, line)){
    stringstream ss(line);
    ss >> first >> last >> movies;
    names[i] = first + " " + last;
    numMovies[i] = movies;
    ++i;
}

for(int i = 0; i < numOfStudents; i++)
    cout << names[i] << endl;

// don't forget to free memory:
delete[] movies;
delete[] names;
infile.close();

我建议使用课程vector

std::ifstream infile("data.txt");
std::string sLine;
std::vector<std::string> vecNames;

while(getline(infile, sLine))
    vecNames.push_back(sLine);

auto size = vecNames.size();
//for(auto x : vecNames)
//      std::cout << x << std::endl;

for(int i(0); i != size; ++i)
    std::cout << vecNames[i] << std::endl;

infile.close();