tellg和getline

时间:2016-10-23 16:11:36

标签: c++ input mingw ifstream

在我的项目中,有多行输入,我得到一个奇怪的错误,在第一行之后,ifstream根据文件末尾的距离来切断字符。 (如果有3行,则第1行是正常的。第2行缺少该行的前2个字符。第3行缺少该行的1个字符。)

输入/输出的示例:

输入:

John Smith
Jane Doe
Donald Trump

输出:

whole line:John Smith*
What's in the stream?:John Smith.
        Next line...
whole line:Jane Doe*
What's in the stream?:ne Doe.
        Next line...
whole line:Donald Trump*
What's in the stream?:onald Trump.

代码:

Input1功能:

void input1(ifstream& in, LinkedList &linList)
{

    string wholeLine;
    int len = in.tellg();
    while(getline(in,wholeLine)){
        in.seekg(len);
        string name;
        vector<double> xArr;
        vector<double> yArr;

        cout << "whole line:" << wholeLine << "." << endl;

        string streamCheck;
        int tempLocForCheck = in.tellg();
        getline(in,streamCheck);
        in.seekg(tempLocForCheck);
        cout << "What's in the stream?:" << streamCheck << "." << endl;

        name = getName(wholeLine);    //Call to getName function

        string throwAway;
        getline(in,throwAway);
        cout << "\t\tNext line..." << endl;

        len = in.tellg();
    }
}

getName函数:

string getName(string inName){
    stringstream in(inName);

    string name = "";
    bool notNumber = true;
    while(in.peek() != '\n' && notNumber){
        string letter(1,in.peek());
        if(regex_match(letter ,regex("^[A-Za-z\\s]+$"))){
            name += in.get();
        }
        else{
            notNumber = false;
        }
    }
    return name;
}

当然,此代码已经简化到不包含ifstream流的任何内容。我按原样测试了代码,问题仍然存在。

我底部有throwAway,因为在实际使用代码时,我会在行尾添加无关数据。

正如您所看到的,似乎tellg()返回的值与getline()所期望的值不同。根据{{​​1}},我们处于行首。但是,根据getline(),我们不在行的开头。

我真的很感激任何帮助。对不起,有很多代码需要仔细阅读。我尽力减肥。我一直在摆弄它几个小时试图解决它,但一直没能。感谢。

我不知道它是否有所作为,但我需要使用MinGW 4.9.2编译器。

0 个答案:

没有答案