C++中cin.getline()和cin.ignore()函数

getline()函数:

getline()函数是一个比较常见的函数。根据名字直接望文生义,就知道这个函数是来完成读入一行数据。

getline是C++标准库函数;但不是C标准库函数,getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。

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

第一种:在头文件<istream>中,是iostream类的成员函数。

第二种:在头文件<string>中,是普通函数。

第一种: 在<istream>中的getline()函数有两种重载形式:

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

作用是: 从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,

如果遇到delim 或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。

第二种: 在<string>中的getline函数有四种重载形式:

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

istream& getline (istream&& is, string& str);
用法和上第一种类似,但是读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。

函数的变量:

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

str   :string类型的引用,用来存储输入流中的流信息。

delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。

当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。而getline可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。

测试代码:

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"

using namespace std;

int main()
{
	char name[32];
	char sex[15];
	
	cout << "enter your name:";
	cin >> name;

	cout << "enter your sex";
	cin >> sex;
	
	cout << "name:" << name << " " << "sex:" << sex << endl;
	system("pause");	
	return 0;
}	

运行结果:

我们使用getline就会避免这种问题:

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"

using namespace std;

int main()
{
	char name[32];
	char sex[15];
	
	cout << "enter your name:";
	//cin >> name;
	cin.getline(name, 32);

	cout << "enter your sex";
	//cin >> sex;
	cin.getline(sex, 10);
	
	cout<<"name:"<<name<<" "<<"sex:"<<sex<<endl;
	system("pause");	
	return 0;
}	

运行结果:

ignore()函数:

cin.ignore 是从输入流(cin)中提取一定数目的字符并把提取的字符忽略(ignore)

  1. cin.ignore(n,c)  //从输入流cin中提取n个字符或遇到c停止,并忽略之前的字符;

  2. cin.ignore(num) //从输入流cin中提取n个字符,输入的字符数量一般要大于num

cin.ignore常用功能:清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。

  1. cin.ignore(1024,'\n'); //把第一个参数设置足够大,在这个范围内读取到 回车 后,把回车前面输入流的字符连同回车一同清除

  2. cin.clear();

使用cin.ignore()也可以解决上面的问题:

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"

using namespace std;

int main()
{
	char name[32];
	char sex[15];

	cout << "enter your name:";
	cin >> name;
	
	cout << "enter your sex";
	cin.ignore(32, '\n');
	cin >> sex;
	
	cout << "name:" << name << " " << "sex:" << sex << endl;
	system("pause");
	return 0;
}

运行结果:

发布了36 篇原创文章 · 获赞 6 · 访问量 2025

猜你喜欢

转载自blog.csdn.net/the_sea1/article/details/102820743