📜  当输入中有空行时,如何在C++中使用getline()?

📅  最后修改于: 2021-05-26 01:40:58             🧑  作者: Mango

在C++中,如果我们需要从流中读取少量句子,则通常首选的方法是使用getline()函数。它可以读取直到遇到换行符或看到用户提供的定界符。

这是C++中的示例程序,该程序读取四个句子并在最后显示“:newline”

// A simple C++ program to show working of getline
#include 
#include 
using namespace std;
int main()
{
    string str;
    int t = 4;
    while (t--)
    {
        // Read a line from standard input in str
        getline(cin, str);
        cout << str << " : newline" << endl;
    }
    return 0;
}

样本输入:

This
 is
 Geeks
 for

如预期的输出是:

This : newline
is  : newline
Geeks : newline
for : newline

上面的输入和输出看起来不错,当输入之间有空白行时可能会出现问题。

样本输入:

This

is 

Geeks

for

输出:

This : newline
 : newline
is  : newline
 : newline

它不打印最后两行。原因是即使未读取任何字符,getline()也会读取直到遇到enter。因此,即使第三行没有任何内容,getline()也会将其视为单行。进一步观察第二行中的问题。

可以修改代码以排除此类空白行。

修改后的代码:

// A simple C++ program that uses getline to read
// input with blank lines
#include 
#include 
using namespace std;
int main()
{
    string str;
    int t = 4;
    while (t--)
    {
        getline(cin, str);
  
        // Keep reading a new line while there is
        // a blank line
        while (str.length()==0 )
            getline(cin, str);
  
        cout << str << " : newline" << endl;
    }
    return 0;
}

输入:

This

is 

Geeks

for

输出:

This : newline
is  : newline
Geeks : newline
for : newline
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”