【发布时间】:2020-03-28 20:58:07
【问题描述】:
我有以下文本文件:
1. DC's Legends of Tomorrow
2. Ice Age 5: Collision Course
3. Miss Peregrine's Home for Peculiar Children
4. Forbidden Empire
5. The Zero Theorem
6. X-Men: Days of Future Past
7. Jupiter Ascending
8. The Mortal Instruments: City Of Bones
9. The Age of Adaline
10. Melancholia
每个条目之间都有一行空格。我正在尝试通读文件并将每部电影保存到字符串数组中。 我收到错误消息:调试断言失败! 表达式:字符串子字符串超出范围
这是我的代码:
void readFile() {
ifstream in_stream;
int numberLines = 10;
string movieName;
int movieNum;
string movieList[10];
in_stream.open("input.txt");
for (int i = 0; i < 10; i++)
{
in_stream >> movieNum >> movieName;
movieList[i] = movieName;
}
in_stream.close();
}
【问题讨论】:
-
这似乎是一个学习如何使用调试器的好机会,或者至少在你的代码中使用“printf-style”调试。第一次循环迭代中
movieNum和movieName的值是多少?第二次迭代?我很确定它们不是您在第二次迭代中所期望的,因为读入movieName将不会处理第一行中的所有单词。 -
我意识到这不是问题的一部分,但如果有一个标准标题,您可以在其中读取条目数、分隔符等,那就更好了。这比硬编码好得多条目数量
-
您应该使用 std::getline()` 读取到每一行的末尾。此外,您应该检查每个流操作的返回值。
标签: c++ c++11 visual-c++ ifstream