逐行读取文件并将其存储在矢量中,进行处理

时间:2014-08-23 01:34:42

标签: c++ file-io

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

Supoose我有一个像这样的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;
}

1 个答案:

答案 0 :(得分:2)

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

使用其他变量,或使用

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

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

确保你修复了两个内部循环:开头的那个读取每个数字并将其推送到向量上,然后弹出结束的那个(尽管你可以只使用vect1.empty() )。