遇到换行符时使用 getline 退出循环
Posted
技术标签:
【中文标题】遇到换行符时使用 getline 退出循环【英文标题】:exiting out of a loop using getline when you encounter a newline character 【发布时间】:2020-11-21 12:22:19 【问题描述】:这可能是最基本的问题,但我在使用 getline 退出循环时遇到问题。假设用户在控制台中使用 std::cin 输入这些单词:
/*
word
word_one
word_two
word_three
word_four
*/
假设我们已经定义了一个由字符串向量组成的空向量vector< vector<string> >
。此特定输入所需的vector< vector<string> >
必须是:< <word, word_one, word_two>, <word_three, word_four> >
。
我的以下代码是:
int main()
vector< vector<string> > vv;
vector<string> v;
string line;
while(getline(cin, line))
if(line == "\n")
vv.push_back(v);
break;
elsev.push_back(line);
return 0;
有什么帮助吗?感觉好像 if 语句没有检测到“\n”。它只是无休止地继续下去。 (另外,不要担心包含和命名空间)
【问题讨论】:
【参考方案1】:问题是您正在检查“\n”,而您必须检查“”。这是因为getline
没有复制“\n”字符,所以会是一个空字符串。
using namespace std;
int main()
vector< vector<string> > vv;
vector<string> v;
string line;
while(getline(cin, line))
if(line == "")
cout<<line;
vv.push_back(v);
break;
else v.push_back(line);
return 0;
【讨论】:
【参考方案2】:是的,if
条件永远不会执行,因为getline
会丢弃行尾字符。
http://www.cplusplus.com/reference/string/string/getline/
空行将产生一个空字符串,而不是包含 '\n' 的字符串。
【讨论】:
以上是关于遇到换行符时使用 getline 退出循环的主要内容,如果未能解决你的问题,请参考以下文章