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

📅  最后修改于: 2023-12-03 15:25:36.634000             🧑  作者: Mango

在C++中使用getline()处理空行输入

当我们使用C++中的getline()函数来处理输入时,有时候获取到的输入可能会包含空行。这时候我们要如何才能正确处理这些空行呢?本文将对此进行介绍。

getline()函数

在介绍如何处理空行之前,先简单介绍一下C++中的getline()函数。

getline()函数可以从输入流中读取一行数据,并将其存储在一个字符串变量中。其语法如下:

istream& getline (istream& is, string& str, char delim);

其中:

  • is:输入流对象。
  • str:要存储读取到的数据的字符串变量。
  • delim:指定行结束的分隔符。如果未指定,默认为\n。

getline()函数会从输入流中读取数据直到遇到行结束符(即delim指定的字符)。输入流中的行结束符可以是\n、\r或\r\n中的任意一个。读取到行结束符后,getline()函数会将行结束符之前的所有字符存储在str变量中,并将结束符从输入流中丢弃。

处理空行

如果输入流中有空行,那么getline()函数遇到空行时会认为这一行已经结束,而将空行字符从输入流中丢弃。这时候如果我们直接使用getline()函数来读取输入,就可能读取不到需要的数据。下面是一个示例:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string line1, line2;
    getline(cin, line1);
    getline(cin, line2);

    cout << "Line 1: " << line1 << endl;
    cout << "Line 2: " << line2 << endl;

    return 0;
}

如果输入中有一行是空行,那么上面的程序只能读取到一行数据。如果我们想要正确读取所有输入,可以进行如下修改:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string line1, line2;
    while (getline(cin, line1))
    {
        if (line1.empty()) // 当前行为空行
            continue;
        if (!getline(cin, line2)) // 无法继续读取数据
            break;

        cout << "Line 1: " << line1 << endl;
        cout << "Line 2: " << line2 << endl;
    }

    return 0;
}

可以看到,我们在while循环中使用getline()函数来读取每一行数据,并使用if语句来判断当前行是否为空行。如果当前行为空行,则直接进入下一次循环。如果当前行不为空行,则继续使用getline()函数读取下一行数据。如果无法继续读取数据(即输入流已经到达末尾),则退出循环。

总结

当输入中包含空行时,我们可以使用循环结构和if语句来处理这些空行,以确保可以正确读取所有输入数据。