Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读取输入并检查是否以两个换行符结束_C++_File_Loops_Stream - Fatal编程技术网

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;
    }
}