【C/C++】scanf()、gets()、getchar()、getline()、cin.getine()、cin.get()处理输入流的区别

一、具体功能及区别

1、scanf()

scanf()函数用来接收多种格式的数据,不可以接收空格,遇到回车默认输入结束(不能处理回车符,将其看作再次输入的字符)。

//不可接收空格
//在控制台中输入“Hello World”时,char_array的值是Hello
char array[20] = {0};
scanf("%s", array);

//遇到回车默认输入结束,且将回车作为下一次输入的字符
//在控制台中输入数字“5”然后按下回车键,此时ret_int的值是5,而ret_char的值是0x0a,即回车的ASCII码值
int ret_int;
char ret_char;
scanf("%d", &ret_int);
Scanf("%c", &ret_char);

2、gets()

gets()函数用来接收输入的字符串,其只会读一行,可以接收空格,遇到回车符默认输入结束(不能处理回车符,但会自动舍弃回车)。

//可接收空格
//在控制台中输入“Hello World”时,array的值是Hello World
char array[20] = {0};
gets(array);

3、getchar()

getchar()函数读入一个字符,并返回这个字符;回车也算一个字符,可以读取。如果读到文件结尾则返回EOF。

char c=getchar();

4、getline()

getline()函数一次读取多个字符(包括空格),遇到回车停止读入,并会屏蔽回车键(即不作为下一次的输入)

//遇到回车结束读入,且屏蔽回车键
//在控制台中输入数字“5”然后回车,此时str的值是5且屏蔽了回车键,即再次接收控制台输入时,之前的回车键已经接收不到了
string str;
getline(cin, str);

5、cin.getline()

cin.getline()属于istream流,而getline()属于string流,但用法几乎相同。一次读取多个字符(包括空格),读取后会直接丢弃回车/换行符,下一次不会读取换行。

其可以以指定地址作为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为’\n’。声明为

cin.getline(字符指针(char*), 字符个数N(int), 结束符(char));

cin.getline(str, 5, 'a'); //第三个参数默认为”\0”
cin.getline(str, 5);
cin.getline(str);

6、cin.get()

cin.get()读取后,回车仍然会留在输入流中

cin.get(str, 20);
cin.get(str);

二、总结 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值