矢量,结构和while循环 - 从文件中读取

时间:2016-10-25 13:22:53

标签: c++ loops vector structure

我有一个包含信息的文本文件。它看起来像这样:

Rimas 252 45
Robertas 187 13
Jurgis 205 36
Matas 58 50
Antanas 145 5
10 20

如您所见,每一行都有三个不同的成员(名称,第一个数字,第二个数字),直到最后一行,它只有两个成员(两个数字)。我正在尝试将此信息读取到我的代码中。一切正常,直到最后一行,因为它有两个成员,并且在该行中没有字符串。我需要让我的代码识别不同的行并读取其他方法,与上面的行不同。

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

struct lankytojai { // name, first number, second number
    string vardas;
    int litai;
    int ltcentai;
};

void read(vector<lankytojai> l) {
    ifstream failas("vvv.txt"); //reads three members correct, last two incorrectly
    int i = 0;
    while(failas) {

        lankytojai lan;
        int lt;
        string var;

        while(!(failas >> lan.ltcentai)) {
            failas.clear();
            if(failas >> var) {
                lan.vardas += var;
            }
            if(failas >> lt) {
                lan.litai = lt;
            }
            else {
                return;
            }
        }

        l.push_back(lan);
        cout << l[i].vardas << " " << l[i].litai << " " << l[i].ltcentai << endl;
        i++;
    }

}

int main() {
    vector<lankytojai> l;
    read(l);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

只需重新构建代码,使用std::getline()一次获取整行(作为std::string),然后检查它包含的空格数。

for (string line; getline(failas, line); ) {
    size_t space_count = count(line.begin(), line.end(), ' ');
    // ...
}