Ifstream无法捕获每行中最前面的字符

时间:2014-09-04 15:45:17

标签: c++

我想通过使用与getline函数相关联的ifstream

从文本文件中读取下面的确切行
KM78457   , C1    , Testing              , ZMY290HR6UP-B   ,GHTTTTTTT          ,   0.1268 ,      32 ,        4.06 ,

但它应该能够从" ,C1,测试,ZMY290HR6UP-B,GHTTTTTTT,0.1268,32,4.06,"因此,仍然缺失,因为所有人都未能捕捉到" KM78457"在最前线。

std::ifstream fi;

std::string streamline;
fi.open("C:/exp_test.txt",std::ios::in );

while (!fi.eof())
{

    fi.clear();
    fi.seekg(0,std::ios::cur);
    fi >> newline;
    std::getline(fi,streamline);
    std::cout << streamline ;

}

任何人都可以给我一个帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

问题是您在格式化提取后直接使用未格式化的输入。默认情况下,格式化提取器不会忽略或丢弃用户提交输入后出现的剩余换行符。您需要使用std::ws手动清除换行符。

此外,使用!eof()输入的条件总是错误的。在执行输入之前检查流的状态是错误的,如果使用提取失败的结果,则会导致问题。

使用输入操作本身作为条件。它将执行读取并然后检查流的状态,如果流遇到错误则返回true或false。

while (std::getline(fi >> newline >> std::ws, streamline))
{
    std::cout << streamline;
}