C++ C++;getline()在第二次迭代中未获取分隔符

C++ C++;getline()在第二次迭代中未获取分隔符,c++,delimiter,getline,C++,Delimiter,Getline,因此,我有一些数据表如下所示: "1444394028","1","5339","M","873" "1444394028","1","7045","V","0.34902" "1444394028","1","7042","M","2" "1444394028","1","7077","V","0.0470588" 我使用此方法分离数据: int i = 0; std::ifstream dataInput(path); std::string line2; char delimeter

因此,我有一些数据表如下所示:

"1444394028","1","5339","M","873"
"1444394028","1","7045","V","0.34902"
"1444394028","1","7042","M","2"
"1444394028","1","7077","V","0.0470588"
我使用此方法分离数据:

int i = 0;

std::ifstream dataInput(path);
std::string line2;

char delimeter(',');

std::string timestampTemp, millisecondsSinceStartTemp, deviceTemp, typeTemp, valueTemp;

while (std::getline(dataInput, timestampTemp, delimeter)) {
    while (i < 3) {

        std::vector<struct struct_t> writedata(1);


        std::getline(dataInput, millisecondsSinceStartTemp, delimeter);
        std::getline(dataInput, deviceTemp, delimeter);
        std::getline(dataInput, typeTemp, delimeter);
        std::getline(dataInput, valueTemp);

        std::cout << "TEST " << timestampTemp << " ...." << millisecondsSinceStartTemp << " ....." << deviceTemp << "..... " << typeTemp << "...... " << valueTemp << endl;

        writedata[0].timestamp = atoi(timestampTemp.substr(1, timestampTemp.size() - 2).c_str());
        std::cout << "!" << endl;
        writedata[0].millisecondsSinceStart = atoi(millisecondsSinceStartTemp.substr(1, millisecondsSinceStartTemp.size() - 2).c_str());
        std::cout << "!" << endl;
        writedata[0].device = atoi(deviceTemp.substr(1, deviceTemp.size() - 2).c_str());
        std::cout << "!" << endl;
        writedata[0].value = atof(valueTemp.substr(1, valueTemp.size() - 2).c_str());
        std::cout << "!" << endl;


        writedata[0].type = (typeTemp.substr(1, typeTemp.size() - 2).c_str());

        std::cout << "!" << endl;
        std::cout << "-data to be written: " << writedata[0].timestamp << " - " << writedata[0].millisecondsSinceStart << " - " << writedata[0].device << " - " << writedata[0].value << " - " << writedata[0].type << endl;


        this->append(writedata.data(), &i);

        timestampTemp.clear();
        millisecondsSinceStartTemp.clear();
        deviceTemp.clear();
        typeTemp.clear();
        valueTemp.clear();

        i++;
    }
}

正如您所看到的,第二次迭代不起作用,我也说不出原因。我已经让它工作了,但看起来我毁了它。与其他解决方案不同,文件中也没有空格。一如既往,我将非常感谢您的帮助。

为什么您有嵌套的while循环?内环看起来不必要,仅用于测试目的。查看前3次迭代的行为。OK。最有可能的是,这正是让您陷入困境的原因,因为在接下来的三次迭代中,您没有执行
std::getline(dataInput、timestampTemp、delimeter)
。如果要调试代码,可以使用调试器,只需遍历代码即可。@NathanOliver修复了它。谢谢
TEST "1444394028" ...."1" ....."5339"..... "M"...... "873"
!
!
!
!
! 
-data to be written: 1444394028 - 1 - 5339 - 873 - M
TEST  ...."1444394028" ....."1"..... "7045"...... "V","0.34902"