【问题标题】:Index out of bounds when reading entries from a file从文件中读取条目时索引超出范围
【发布时间】: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”调试。第一次循环迭代中movieNummovieName 的值是多少?第二次迭代?我很确定它们不是您在第二次迭代中所期望的,因为读入movieName不会处理第一行中的所有单词。
  • 我意识到这不是问题的一部分,但如果有一个标准标题,您可以在其中读取条目数、分隔符等,那就更好了。这比硬编码好得多条目数量
  • 您应该使用 std::getline()` 读取到每一行的末尾。此外,您应该检查每个流操作的返回值。

标签: c++ c++11 visual-c++ ifstream


【解决方案1】:

从文件中读取数据时,您只能获取字符串数据。 MovieNum 被声明为整数。但您正试图将字符串数据存储到其中。如果你想要整数值(MovieNum),你可以从字符串类型转换成整数。

void readFile() {
        ifstream in_stream;
        int numberLines = 10;
        string movieName;
        string 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();
    }

希望这可能会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2018-07-23
    • 2014-08-20
    相关资源
    最近更新 更多