【发布时间】:2017-01-03 16:00:49
【问题描述】:
我确定这里有一个新手错误,但我终生无法弄清楚。
我正在尝试使用getline() 读取两个字的行(名字和姓氏),然后将名称排序到结构的成员字段中。但是,getline() 似乎超出了行尾,并将下一行的第一个单词附加到它应该得到的行的最后一个单词。
换句话说,当试图读取一行的最后一个单词时,getline() 正在读取该单词和下一行的第一个单词。
输入文件的格式为:
西雅图水手队
Norichiki Aoki
赛斯·史密斯
罗宾逊卡诺
这是我的代码:
struct Player {
string firstName;
string lastName;
float avg;
};
struct Team {
Player roster[8];
string teamName;
};
Team home = {};
stringstream iss;
string token;
string lineread;
while (getline(inFile, lineRead, '\n')){
iss << lineRead;
if (getline(iss, token, ' '))
{
if(s % 2 == 0)
home.roster[s/2].firstName = lineRead;
else
home.roster[s/2].lastName = lineRead;
}
s++;
cout << "token:" << token << endl;
}
我得到的输出如下所示:
代币:西雅图
代币:MarinersNorichiki
代币:AokiSeth
代币:史密斯罗宾逊
但我想拥有
代币:西雅图
代币:水手
代币:Norichiki
代币:青木
【问题讨论】:
-
您的问题与
getline()的使用无关。您期望的输出需要stringstreams 操作员<<来清除以前的内容。它没有。 -
为什么要使用两次 getline。
s变量是什么?请包含所有相关代码。
标签: c++ newline delimiter getline