C 中getline函数多种定义的使用方法
创始人
2025-07-01 08:00:30
0

getline()函数是一个相当常见的工具,用于从输入流中获取一行数据。

下面我们将详细说明C++中的getline()函数用法,以及在使用getline()函数作为while循环条件时需要注意的问题:

在C++中,getline函数本质上有两种形式:

第一种形式:作为iostream类的成员函数,需要在头文件中声明。

第二种形式:作为普通函数,也需要在头文件中声明。

第一种形式的getline()函数有两种重载形式:

1. istream& getline(char* s, streamsize n);

2. istream& getline(char* s, streamsize n, char delim);

这两种形式的作用都是从输入流中读取最多n个字符(包括终止字符),然后将它们保存在字符数组s中。即使在读取不满n个字符的情况下,如果遇到指定的delim字符或达到字符数限制,读取操作也会终止,而且delim字符不会被保存在s中。

#include 
// std::cin ;  std::cout ;  std::endl
int main()
{
	char name[256], wolds[256];
	std::cout << "Please input your name: ";
	std::cin.getline(name, 256);
	std::cout << "Please input your wolds: ";
	std::cin.getline(wolds, 256);
	std::cout << "The result is:   " << name << ", " << wolds << std::endl;
	std::cout << std::endl;
	return 0;
}

输入:Mr. Ling

You are fantastic!

输出:

Mr. Ling, You are fantastic!

通过字符数限制和指定终止字符进行修改的代码示例:

#include 
// std::cin ;  std::cout ;  std::endl

int main(){
	char name[6];

	std::cout << "Please input your name: ";

	std::cin.getline(name, 6, '#');

	std::cout << "The result is:   " << name << std::ends;

	std::cout << std::endl;//学习交流群:558970390

	return 0;
}

输入: //streamsize限定,截断输出 wonderful
输出:wonde

输入: //所设置的结束标识符,截断输出 won#derful
输出:won

第二种方法:在C++中的getline函数具有四种不同的载入形式:

istream& getline (istream& 输入流, string& 字符串, char 分隔符);

istream& getline (istream&& 输入流, string& 字符串, char 分隔符);

istream& getline (istream& 输入流, string& 字符串);

istream& getline (istream&& 输入流, string& 字符串);

这些函数的用法与第一种方法类似,但是它们接受一个输入流作为参数,将读取的内容存储在字符串类型的字符串中。

函数参数的解释:

输入流:表示一个输入流,例如cin。

字符串:这是一个字符串类型的引用,用于保存从输入流中读取的文本。

分隔符:这是一个字符类型的变量,用于指定何时终止读取;如果未自定义分隔符,函数将在遇到换行符'\n'时终止读取。

以下是一个示例代码:

#include 
#include 
int main() {
	std::string name;
	std::cout << "Please input your name: ";
	std::getline(std::cin, name);
	std::cout << "Welcome to here!" << std::ends << name << std::endl;
	std::cout << std::endl;
	return 0;
}

在输入数据时,只有在遇到换行符或文件结束时,才会停止接受输入。

文件结束(EOF)是C语言中用于区分有效数据和输入结束的特殊标志。EOF的输入方式取决于操作系统,例如在Windows下是使用Ctrl+Z,在Linux/Unix下是使用Ctrl+D。

需要注意的是,getline()函数并非C库函数,而是C++库函数。它会在以下情况下终止读取并生成当前字符串:

1. 达到文件末尾。

2. 遇到指定的定界符(默认定界符是换行符,所以遇到换行符时会返回)。

3. 输入达到最大限制。

在下面的示例代码中,我们使用getline()函数在while循环中作为条件判断,实现逐行读取并输出:

#include 
#include 
using namespace std;
int main() {
string line;
while (getline(cin, line))
cout << line << endl;
return 0;
}
```

大家可能会发觉,在运行时,通常的输入方式都无法中断循环,有时甚至可能出现难以理解的错误。那么,究竟是什么原因导致了这种情况呢?接下来我们来详细分析一下:

getline()函数的定义如下:istream& getline(istream & is, string & str, char delim);

在这个语句中,while循环的判断条件实际上是关于cin(标准输入流)的状态,也就是判断当前是否存在有效的输入数据流。

值得注意的是,输入流是一个对象,我们在判断时考虑的是这个流返回的状态。因此,在正常情况下,无论你如何输入,都无法跳出这个循环。

有些人可能会错误地认为while循环的判断条件是关于"line"(即字符串line是否为空)的,试图通过输入回车来中断循环,但却发现这并不奏效。

事实上,回车和设置的分隔符都可以用来终止getline()函数的读取操作。然而,while循环的判断条件实际上是在判断getline()函数的输入流是否有效。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...