C++ cin的成员函数及其常见用法

一.cin的常见读取方法

Ⅰ.cin>>

  1. cin 可以连续从键盘读取想要的数据,以空格、tab 或换行作为分隔符。
  2. 当 cin>> 从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>> 会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>> 不做处理
#include <iostream>
using namespace std;

int main()
{
	char a;
	int b;
	float c;
	cin>>a>>b>>c;
	cout<<a<<" "<<b<<" "<<c<<" "<<endl;

	return 0;
}

输入【回车 回车 a 回车11 回车 3.14】输出结果如下

a 11 3.14

Ⅱ.cin.get()

1. 读取一个字符,可以使用 cin.get() 或者 cin.get(var)

#include <iostream>
using namespace std;

int main()
{
	char a;
	char b;
	a=cin.get();
	cin.get(b);
	cout << a << b <<endl;
	return 0;
}

输出

e
e

请输入任何键以继续...

(1)从结果可以看出,cin.get() 从输入缓冲区读取单个字符时不忽略分隔符,直接将其读取,就出现了如上情况,将换行符读入变量 b,输出时换行两次,一次是变量 b,一次是 endl。
(2)cin.get() 的返回值是 int 类型,成功则返回读取字符的 ASCII 码值。
(3)cin.get(char var) 如果成功返回的是 cin 对象,因此支持链式操作,如cin.get(b).get©。

2. 读取一行

#include <iostream>
using namespace std;

int main()
{
	char a;
	char array[20]={NULL}; 
	cin.get(array,20);
	cin.get(a);
	cout<<array<<" "<<(int)a<<endl;
	return 0;
}

输出

123456789
123456789 10

(1)从结果可以看出,cin.get(array,20);读取一行时,遇到换行符时结束读取,但是不对换行符进行处理,换行符仍然残留在输入缓冲区。第二次由cin.get()将换行符读入变量b,打印输入换行符的ASCII码值为10。这也是cin.get()读取一行与使用getline读取一行的区别所在。getline读取一行字符时,默认遇到’\n’时终止,并且将’\n’直接从输入缓冲区中删除掉,不会影响下面的输入处理。

(2)cin.get(str,size);读取一行时,只能将字符串读入C风格的字符串中,即char*,但是C++的getline函数可以将字符串读入C++风格的字符串中,即string类型。鉴于getline较cin.get()的这两种优点,建议使用getline进行行的读取。

Ⅲ.cin.getline()

#include <iostream>
using namespace std;

int main()
{
	char array[20]={NULL};
	cin.getline(array,20); //或者指定结束符,使用下面一行
	//cin.getline(array,20,'\n');
	cout<<array<<endl;
	return 0;
}

注意,cin.getline() 与 cin.get() 的区别是,cin.getline() 不会将行结束符(如换行符)残留在输入缓冲区中

二.从标准输入读取一行字符串的其它方法

Ⅰ.getline()

C++ 中定义了一个在 std 名字空间的全局函数 getline(),因为这个 getline() 函数的参数使用了 string 字符串,所以声明在了头文件中了。

getline() 利用 cin 可以从标准输入设备键盘读取一行,当遇到如下三种情况会结束读操作:
(1)文件结束;
(2)遇到行分隔符;
(3)输入达到最大限度

#include <string> 
#include <iostream>
using namespace std;

int main()
{
	string str;
	getline(cin,str);
	cout << str << endl;
	return 0;
}
hello world
hello world

注意,getline() 遇到结束符时,会将结束符一并读入指定的 string 中,再将结束符替换为空字符。因此,进行从键盘读取一行字符时,建议使用 getline,较为安全。但是,最好还是要进行标准输入的安全检查,提高程序容错能力。

cin.getline() 与 getline() 类似,但是因为 cin.getline() 的输出是char*,getline() 的输出是 string,所以 cin.getline() 属于 istream 流,而 getline() 属于 string 流,二者是不一样的函数。

Ⅱ.gets()

gets() 是 C 中的库函数,在头文件 <stdio.h> 申明,从标准输入设备读字符串,可以无限读取,不会判断上限,以回车或者文件结束符 EOF( 即 -1) 结束,所以程序员应该确保 buffer 的空间足够大,以便在执行读操作时不发生溢出。Windows 下命令行输入文件结束符 EOF 的方式为 Ctrl+z,Linux 为 Ctrl+d

#include <iostream>
using namespace std;
int main()
{
	char array[20]={NULL};
	gets(array);
	cout << array << endl;
	return 0;
}
hello world
hello world

由于该函数是 C 的库函数,所以不建议使用

转载自
https://blog.csdn.net/K346K346/article/details/48213811

发布了13 篇原创文章 · 获赞 0 · 访问量 263

猜你喜欢

转载自blog.csdn.net/Caiyii530/article/details/105050970