关于c ++:逐行读取文件并将其存储在向量中,然后对其进行处理

Reading a file line by line and store it in a vector, process it

本问题已经有最佳答案,请猛点这里访问。

我喜欢读C++中的文本文件。

supoose我有一个sample.txt文件,如下所示:

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

文件的第一行表示实例数(这里是2个实例)。第二行和第三行是关于第一个指令的信息。第三行和第四行表示第二个实例。下面是我阅读这个文本文件的主要功能。但当我运行它时,它就不工作了。也就是说,阅读过程无法继续。任何人都能帮我。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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;
}


问题是,在所有实例的外部循环和向量元素的内部循环中,都使用相同的变量i。因此,当内部循环结束时,i设置为8。由于此值高于numberOfInstances,因此外部循环停止。

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

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

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

确保修复两个内部循环:一个在开始时读取每个数字并将其推到向量上,另一个在结束时弹出关闭(尽管您可以只使用vect1.empty())。