【问题标题】:Reading a file line by line and store it in a vector, process it [duplicate]逐行读取文件并将其存储在向量中,对其进行处理[重复]
【发布时间】:2025-11-22 18:55:01
【问题描述】:

我有一个关于在 C++ 中读取文本文件的问题。

假设我有一个这样的 sample.txt 文件:

2
8 5
1 1 1 2 3 4 5 6
4 7
1 2 3 4

文件的第一行表示实例的数量(这里是 2 个实例)。第二行和第三行是关于第一个实例的信息。第三行和第四行代表第二个实例。 以下是我读取此文本文件的主要功能。但是当我运行它时,它只是不起作用。即阅读过程无法继续。任何人都可以帮助我。

int main()
{
    int number;
    string filePath;
    int numberOfInstances;
    int Max;
    int Rings;
    cout << "please input your file path: " ; //ie, D:\\sample.txt

    cin >> filePath;

    ifstream fin;

    fin.open(filePath.c_str());
    if(fin.fail()) {
        cout << "sorry, fail to open" << endl;
        exit(1);
    }

    fin >> numberOfInstances;

    vector<int> vect1;

    for(int i = 0; i < numberOfInstances; i++) {
        fin >> Rings;
        fin >> Max;
        for(i = 0; i < Rings; i++) {
            fin >> number;
            vect1.push_back(number);
        }

        //
        //code to process Vect1, eg, sort it
        //

        for(i = 0; i < Rings; i++) {
            vect1.pop_back();
        }

    }
    fin.close();
    return 0;
}

【问题讨论】:

  • 您可以使用getline() 函数从流中读取一行。

标签: c++ file-io


【解决方案1】:

问题是您对所有实例的外循环和向量元素的内循环使用相同的变量i。所以当内循环结束时,i 设置为 8。由于这高于 numberOfInstances,外循环停止。

要么使用不同的变量,要么使用

for (int i = 0; i < Rings; i++)

在内部循环中。 int 声明使它创建一个只有循环范围的新变量,因此它不会覆盖外部循环中使用的变量。

确保修复了两个内部循环:开头的一个读取每个数字并将其推送到向量上,而末尾的一个弹出关闭(尽管您可以为此使用vect1.empty())。

【讨论】:

  • 耶稣,我犯了一个幼稚的错误。调试它需要我几个小时,天哪,我非常感谢你指出它
  • 这些小时中有多少是使用实际调试器花费的,因此您可以在程序运行时查看变量?如果你说没有,那么我认为是时候学习一项新技能了——它会带来巨大的回报。