C++ getline()

2025 年 8 月 29 日 | 6 分钟阅读

在 C++ 中,getline() 是一个定义在 <string> 头文件中的内置函数,它允许从输入流中读取一整行文本。cin 是一个用于从用户处获取输入的对象,但它不允许接收多行输入。

我们使用 getline() 函数来接收多行输入。它能够读取一整行,包括空白字符,这使其成为处理 C++ 中更复杂输入场景的强大工具。

getline() 函数的语法

1. 第一种声明方式是传递三个参数。

以上语法包含三个参数,即 is、strdelim

其中,

is: 它是 istream 类的对象,定义了从何处读取输入流。

str: 它是一个字符串对象,用于存储字符串。

delim: 它是分隔字符。

返回值

此函数返回作为参数传递给函数的输入流对象。

2. 第二种声明方式是传递两个参数。

以上语法包含两个参数,即 isstr。此语法与上述语法几乎相似;唯一的区别是它没有任何分隔字符。

其中,

is: 它是 istream 类的对象,定义了从何处读取输入流。

str: 它是一个字符串对象,用于存储字符串。

返回值

此函数也返回作为参数传递给函数的输入流。

C++ getline() 函数示例

让我们看一个简单的例子,在不使用 getline() 函数的情况下获取用户输入。

示例

编译并运行

输出

Enter your name :
John Miller
Hello John

说明

在这个例子中,我们使用 cin>>name 语句来获取用户输入,即我们没有使用 getline() 函数。之后,我们输入了'John Miller'作为用户输入,但只显示了'John'。因此,我们得出结论,cin 在遇到空格字符时不会考虑其后的字符。

让我们通过使用 getline() 函数来解决上述问题。

示例

编译并运行

输出

Enter your name :
John Miller
Hello John Miller

说明

在上面的代码中,我们使用了 getline() 函数来接收字符,即使遇到空格字符也能接收。之后,我们可以观察到两个单词,即 John 和 Miller,都显示出来了,这意味着 getline() 函数也考虑了空格字符后面的字符。

在 C++ 中使用带分隔符的 getline() 在空格处停止输入

示例

编译并运行

输出

Enter your profile :
Software Developer
The profile is: Software

说明

在上面的代码中,我们使用 getline() 函数获取用户输入,但这次我们还在第三个参数中添加了分隔字符('')。这里,分隔字符是一个空格字符,这意味着出现在空格后的字符将不会被考虑。

使用带有两个参数的 C++ getline()

在 C++ 中,默认情况下,getline() 函数会一直读取直到遇到换行符 (\n)。它将输入存储在给定的字符串中。这是 getline() 最常用的形式,当我们只想读取整行文本时。

语法

它具有以下语法:

使用两个参数的 C++ Getline () 函数示例

示例

编译并运行

输出

Enter your full name: John Smith
Hello, John Smith!

说明

在这个例子中,它要求用户输入他们的全名。之后,getline(cin, full_name) 函数读取完整的输入,包括空格(例如,“Alice Johnson”)。最后,它使用用户的全名向用户问好。

使用带有三个参数的 C++ getline()

三参数版本的 Getline() 允许我们除了默认的换行符 (\n) 外,再指定一个自定义的分隔符。当数据字段由特殊字符(如逗号、分号或竖线)分隔时,这非常有用。

语法

它具有以下语法:

使用三个参数的 C++ Getline () 函数示例

示例

编译并运行

输出

Enter some text ending with a '#': Hello World, this is C++ Getline #
You entered: Hello World, this is C++ Getline 

说明

这个 C++ 程序会一直读取输入,直到遇到 # 字符。# 不会包含在存储的字符串中。

Getline 字符数组

我们也可以为字符数组定义 getline() 函数,但其语法与前面的不同。

语法

它具有以下语法:

在上面的语法中,有两个参数:一个是 char*,另一个是 size。

其中,

  • char*: 它是一个指向数组的字符指针。
  • Size: 它充当分隔符,定义了数组的大小,意味着输入不能超过这个大小。

C++ Getline 字符数组示例

示例

编译并运行

输出

Enter your favourite fruit: Watermelon
Your favorite fruit is Watermelon

C++ Getline 用于字符数组和超出字符限制

示例

编译并运行

输出

Enter a string: HelloWorldAgain
You entered: HelloWorld

说明

cin.getline(str, 10) 函数最多读取9个字符,并自动在末尾追加一个空字符 (\0)。如果输入超过限制,多余的字符会留在输入缓冲区中,只有允许的字符被存储。

结论

总之,C++ 中的 getline() 函数是一个重要的工具,当你需要读取整行输入时,包括空格,无论是在 std::string 中还是在字符数组中。它首先解决了 cin 在空白符处停止的限制。

C++ Getline() 函数多项选择题

1. getline() 函数在 C++ 中主要做什么?

  1. 读取单个单词
  2. 读取单个字符
  3. 读取一整行直到换行符
  4. 忽略空格并读取到末尾
 

答案: c) 读取一整行直到换行符


2. getline() 解决了 cin 的哪个主要限制?

  1. 读取数值
  2. 读取带空格的输入
  3. 读取字符数组
  4. 排除不想要的输入
 

答案: b) 读取带空格的输入


3. 使用 getline() 时,如果调用它之前输入流中已包含一个换行符,会发生什么?

  1. 它通常会读取新的输入
  2. 它会留下换行符并等待新的输入
  3. 它会立即读取一个空字符串
  4. 这会导致编译时错误
 

答案: c) 它会立即读取一个空字符串


4. 如果我们在 getline() 中指定一个分隔符会发生什么?

  1. Getline() 会忽略它并在换行符处停止
  2. Getline() 在遇到该分隔符时会停止读取
  3. 这会导致段错误
  4. 它会继续读取直到缓冲区满
 

答案: b) Getline() 在遇到该分隔符时会停止读取


5. 以下哪项最能描述 getline() 在处理字符数组时的行为?

  1. 它读取数组的大小
  2. 它会自动调整数组大小。
  3. 它会读取直到指定的大小或遇到分隔符
  4. 它总是留下第一个字符
 

答案: c) 它会读取直到指定的大小或遇到分隔符


下一主题C++ STL