在我的项目中,有多行输入,我得到一个奇怪的错误,在第一行之后,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编译器。