尝试将一些值读入动态分配的数组时,我遇到了一些问题。一切看起来都没问题,但是当代码运行时,只显示数组的最后一个条目。代码如下。如果你能给我一些建议我会很感激。
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;
}
答案 0 :(得分:0)
所以你循环遍历文件,反复将数据读入first
,last
和movies
- 每次都覆盖以前的值。
很久以后,您获取这些变量的当前值,并将其写入动态数组numOfStudents
次。
您可能想要回放流并再次循环遍历文件,以便您可以提取所有数据;你第一次没有真正存储过每个样本。
答案 1 :(得分:0)
您的问题是您在读取循环中分配first
和last
但是您没有将值存储在数组或向量中,因此它们包含最后的值。
要使其正常工作,您可以将代码编辑为:
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();