c++ getline()不停止在行尾
C++ getline() not stopping at the end of line?
我敢肯定这是新手犯的错误,但我怎么也想不出来。
我试图使用getline()
来读取两个单词行(名字和姓氏),然后将名称排序到结构体的成员字段中。然而,getline()
似乎滚动过了行尾,并将下一行的第一个单词附加到它应该得到的行的最后一个单词。
换句话说,当试图读取一行的最后一个单词时,getline()
正在读取该单词和下一行的第一个单词。
输入文件的格式为:
西雅图水手队Norichiki青木
赛斯史密斯
鲁宾逊卡诺
下面是我的代码:
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
token: SmithRobinson
但是我想要
西雅图标记:
令牌:水手
令牌:Norichiki
令牌:青木
std::cin.getline()在与std::cin>> var一起使用时可能会出现问题。
getline可以提供第三个参数——一个"停止"字符。这个字符结束getline的输入。字符被删除,字符串被终止。例子:std:: cin。Getline (str, 100, '|')如果std::cin.getline()没有提供"stop"字符作为第三个参数,它将在到达换行符时停止。鉴于:
float fl;
std::cin >> fl;
char str[101]
std::cin.getline(str, 101);
输入:3.14
3.14被读入fl。3.14后面的换行符仍然位于输入缓冲区中。std:: cin。Getline (str, 101)立即处理仍在输入缓冲区上的换行符。STR变成一个空字符串。给人的错觉是,应用程序"跳过"了std::cin.getline()语句。
解决方法是添加std::cin.ignore();紧跟在第一个std::cin语句之后。这将从输入缓冲区中获取一个字符(在本例中为换行符)并丢弃它。
std::cin.ignore()有三种不同的调用方式:
- 没有参数:从输入缓冲区中取出一个字符并丢弃:std:: cin.ignore ();//丢弃1个字符
- 一个参数:指定的字符数从输入缓冲区中取出并丢弃:std:: cin.ignore (33);//丢弃33个字符
- 两个参数:丢弃指定的字符数,或者丢弃不超过并包括指定分隔符的字符(以先到者为准):std:: cin。忽略(26岁,' n ');//忽略26个字符或换行符,以先出现者为准
试试这样做:
struct Player {
string firstName;
string lastName;
float avg;
};
struct Team {
Player roster[8];
string teamName;
};
Team home = {};
int s = 0;
string line;
while (getline(inFile, line))
{
istringstream iss(line);
iss >> home.roster[s].firstName;
iss >> home.roster[s].lastName;
home.roster[s].avg = ...;
cout << "first: " << home.roster[s].firstName << ", last: " << home.roster[s].lastName << endl;
if (++s == 8) break;
}
- 当用户键入分隔符时,停止getline()输入
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 回文递归不停止
- 我需要线程函数在不停止实际程序的情况下,每2秒打印一次随机数
- VisualStudio 2015 - 只计算命中,不停止
- 功能不停止
- 为什么我的程序持续运行而不停止?
- 为什么名称查找在找到使用 using 指令隐式声明的实体时不停止?
- 在不使用getline的情况下读取C 中的stdin
- 计算文件中不使用 getline() 的行数
- 在运行时动态更新二进制文件(可执行文件)而不停止的任何类型的方法
- (C++)在std::cin上不停止并进入无穷大循环
- 如何自动停止 getline() 循环在 cin 上
- GDB 回溯而不停止
- 在C++中不使用getline()读取文本文件
- C++:将带有空格的cin转换为不带getline函数的字符串
- 不停止While循环运行而未获得预期结果
- 停止getline丢弃换行符
- c++ getline()不停止在行尾