C ++:getline()函数在从文件读取时不包含最后一个字符/字符串

时间:2015-01-24 15:44:04

标签: c++ file delimiter getline istream

我从文本文件中获取这些单词,每个文本文件用' \ t'空间。

我希望能够在单独的行中打印这些单词

例如: 这些是文本文件中的单词:

hel lo    im    carlos 

我想要的结果:

hel lo  
im
carlos

我得到的结果:

hel lo 
im

这里是代码:

string ReadString(ifstream &file){
    char buf[1024];
    file.getline(&(buf[0]), 1024, '\t');
    return string(buf);
}

main(){
    ifstream delimfile("new.txt");
    while(1){
        string words = ReadString(delimfile);
        if(delimfile.eof()==true)
            break;
        cout << words << endl;
    }
    delimfile.close();
}

感谢所有帮助

2 个答案:

答案 0 :(得分:4)

您的上一次读取将一直读到文件末尾(因为没有\t命中它)并设置EOF位。然后测试EOF位是否设置并退出循环。更改条件以检查delimfile.fail()会解决此问题(因为当读取实际失败时设置fail)。

您还可以将单词的输出移到条件上方,但这假定从文件中读取数据有效,这是编写代码的一种不好的方法。同样,在文件末尾添加一个额外的选项卡可以使您的代码正常工作,但只能避免此问题。

但是,如果我打算自己编写,我会这样写:

while (std::getline(file, words, '\t')) {
  cout << words << endl;
}

答案 1 :(得分:1)

试试这个:

while(1)
{
        string words = ReadString(delimfile);
        cout << words << endl;
        if(delimfile.eof()==true)
            break;
        //cout << words << endl;
}