C++ 读取输入并检查是否以两个换行符结束
我正在编写一个程序,如果用户按返回键两次,消息就完成了。检查(如规定)的方法是检查是否已读取两个连续出现的C++ 读取输入并检查是否以两个换行符结束,c++,file,loops,stream,C++,File,Loops,Stream,我正在编写一个程序,如果用户按返回键两次,消息就完成了。检查(如规定)的方法是检查是否已读取两个连续出现的'\n'。我不知道该怎么做。在以下位置研究此线程: 我有了一些想法,并这样做了: for(new_advice; getline(cin, new_advice);) { if(new_advice.substr(new_advice.length()-2,2).compare("\n\n") == 0) { outstream<<endl;
'\n'
。我不知道该怎么做。在以下位置研究此线程:
我有了一些想法,并这样做了:
for(new_advice; getline(cin, new_advice);) {
if(new_advice.substr(new_advice.length()-2,2).compare("\n\n") == 0) {
outstream<<endl;
outstream<<advice;
}
}
for(新建议;getline(cin,新建议);){
if(new_advice.substr(new_advice.length()-2,2).compare(“\n\n”)==0){
扩展使用例如
getline
从给定流中读取一行,并将其存储在第二个参数中给定的变量中。它覆盖给定变量的内容。此外,它不会将换行符放入变量中。这意味着,在字符串中找不到两个换行符,甚至一个也找不到
当用户点击返回键两次时,两个行被C++应用程序读取,其中第二行是空的。
您应该通过检查读取行是否为空来检测这种情况。如果是这种情况,则意味着用户第二次按回车键,之前读取的字符串是他的实际输入。这意味着您需要将输入存储在不同的字符串变量中,以便
getline
不会覆盖您的变量
大概是这样的:
string new_advice;
string input;
while (getline(cin, input)) {
if (input.empty()) {
// Do something with new_advice
}
else {
// Remember input for the case where the user hits return key again
new_advice = input;
}
}
在for
语句中,针对您的new_advice
初始表达式的警告。只需将其删除,那么for
的for(;getline(…);)
或使用while
循环:)您能帮我在该语句中使用while循环吗?while(getline(…)
而不是for(;getline(…);)
这不起作用。可能是我做错了什么。它确实删除了警告和错误,但没有产生任何结果。我这样做:boldfor(std::string new_advice;std::getline(std::cin,new_advice);{if('\n'==std::cin.peek()){Outstream一个基本测试对我来说很有效。请注意,只打印第一行,因为它是唯一的一行,后面跟着两行新行。请不要发布“仅代码”答案。相反,请解释您的代码以及为什么将其作为答案。@Simple它可以工作,但在3个新行字符之后,我希望它在2个新行字符之后终止。。这是一个建议。\n\nterminate@G.K.然后从函数中返回,或者在if
块中调用exit
教授了rfind。所以我怀疑我们是否可以使用它。:(@G.K.除非你被告知具体使用某些特定功能,否则我不明白你为什么不能使用提供给你的完整工具集?
if (new_advice.rfind("\n\n") == new_advice.size() - 2)
{
// Last two characters were newlines
}
string new_advice;
string input;
while (getline(cin, input)) {
if (input.empty()) {
// Do something with new_advice
}
else {
// Remember input for the case where the user hits return key again
new_advice = input;
}
}