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

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

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

在C++中使用getline()函数,可以很方便地读取输入流中的一行文字,但在读取过程中如果输入流中存在空行,会对getline()函数的行为带来一定的影响,因此我们需要特别处理。

getline()函数介绍

在C++中使用getline()函数读取一行文字,可以使用如下的语法:

#include <iostream>
#include <string>

int main()
{
    std::string line;
    std::getline(std::cin, line);
    std::cout << line << std::endl;
    return 0;
}

该程序会读取一行文字并输出在屏幕上。

空行的影响

在输入流中存在空行时,getline()函数的行为会发生变化,具体表现在两个方面:

  • getline()函数读取到空行时会立即返回,不会等待接收下一行文字。
  • getline()函数读取到空行后,会将其作为一个空字符串""返回,并且忽略其中的所有空格和换行符。

以下是一个简单的示例程序,演示了在读取包含空行的输入流时getline()函数的行为:

#include <iostream>
#include <string>

int main()
{
    std::string line;
    while (std::getline(std::cin, line)) {
        std::cout << "Read line: " << line << std::endl;
    }
    return 0;
}

该程序会读取从标准输入中输入的一组文本,当遇到空行时会立即返回并跳过该行。运行该程序并输入如下的文本:

Hello
World

How are you?

程序的输出将会是:

Read line: Hello
Read line: World
Read line: How are you?

可以看到,程序跳过了第二行的空行,而不是将其作为一个空字符串读取。

处理空行

如果需要对空行进行处理,我们可以使用下面的方法:

#include <iostream>
#include <string>

int main()
{
    std::string line;
    while (std::getline(std::cin, line)) {
        if (line.empty()) {
            // 处理空行的代码
            std::cout << "Empty line" << std::endl;
            continue;
        }
        std::cout << "Read line: " << line << std::endl;
    }
    return 0;
}

上面的程序会将空行的处理代码放到一个if语句块中,当检测到输入的一行是空字符串时,就会执行该语句块中定义的代码。

如果需要从空行中读取数据,可以考虑使用getline()函数的第二个参数,该参数用于指定输入的最大字符数,可以设置为一个较大的值,确保getline()函数能够完整地读取空行。

#include <iostream>
#include <string>

int main()
{
    std::string line;
    while (true) {
        std::getline(std::cin, line, '\n');
        if (line.empty()) {
            // 处理空行的代码
            std::cout << "Empty line" << std::endl;
            continue;
        }
        std::cout << "Read line: " << line << std::endl;
    }
    return 0;
}

上面的程序中使用了第二个参数指定了最大字符数,并且将分隔符指定为'\n',以确保getline()函数能够完整地读取空行。

结论

在C++中使用getline()函数读取输入流时,需要特别处理空行。如果需要跳过空行,可以在循环中使用if语句块跳过空行;如果需要读取空行,可以使用getline()函数的第二个参数,确保能够完整地读取空行。