cin、cin.getline()、getline()、cin.get()、gets()、fgets()的用法区别

2023-05-16

写在前面:以下为个人学习记录,如有错误,欢迎指出交流!

一、cin>>
用法1:输入一个数字或字符

#include <iostream>
using namespace std;
main ()
{
	int a;
	char b;
	cin>>a>>b;
	cout<<a<<" "<<b<<endl;
	return 0;
}

输入&输出:5 c
用法2:接收一个字符串,遇“空格”、“Tab”、“Enter”就结束

#include <iostream>
using namespace std;
int main ()
{
	char a[20];
	cin>>a;
	cout<<a<<endl;
	return 0;
}

*输入:abcdef 输出:abcdef
输入:abchj libg //遇空格结束 输出:abchj

二、cin.getline()
用法:接收一个字符串,可以接收空格并输出
二参数函数原形:cin.getline(char [],n)

#include <iostream>
using namespace std;
int main ()
{
	char m[20];
	cin.getline(m,5);
    //char* m;m=new char[20];cin.getline(m,5);
	cout<<m<<endl;
	return 0;
}

*输入:abcdefg 输出:abcd
接收5个字符到m中,其中最后一个变为’\0’,所以只看到4个字符输出;
*如果把5改成15:
输入:abcd efghl 输出:abcd efghl
【Attention】:
cin.getline()也有三个参数形式:cin.getline(字符数组(或指针),接收字符个数,结束字符),此情况下输入遇到结束字符则结束(当第三个参数省略时,系统默认为’\0’);如果上面的cin.getline(m,5)改为cin.getline(m,5,‘d’),则输出结果为abc。

三、cin.get()(用法与cin.getline类似)
1.(一参数)cin.get(ch):读取一个字符,赋值给ch,读取成功返回非0值,读取失败(遇到文件结束符)返回0。
2.(二参数)cin.get(字符数组首地址,字符个数n);
3.(三参数)cin.get(字符数组(或指针),字符个数n,终止字符)读取n-1个字符,若在n-1个字符之前遇到终止字符,提前结束读取。
另:cin.get():从指定的输入流中提取一个字符,函数的返回值就是这个字符。文件结束符会返回EOF,一般以-1代表EOF。

四、getline()
用法:接收一个字符串,可以接收空格并输出,需包含“#include”
函数原形:getline(cin,string类型的变量)

#include<iostream>
#include<string>
using namespace std;
int main ()
{
	string str;
	getline(cin,str);
	cout<<str<<endl;
	return 0;
}

*输入:abc abcdf achd
输出:abc abcdf achd

五、C中介绍的gets()
gets()的用法:读取整行输入(包括空格),直至遇到换行符然后丢弃换行符,储存其余字符,并在这些字符的末尾添加一个空字符;需包含“#include”;可用在多维数组中。
(一般与puts()函数配对使用,puts():在字符串末尾添加换行符后显示字符串)

#include<iostream>
using namespace std;
int main()
{
	char m[20];
	gets(m);
	cout<<m<<endl;
	return 0;
}
#include<iostream>
using namespace std;
int main()
{
	char m[4][15];
	for(int i=0;i<4;i++)
	{
		gets(m[i]);
	}
	for(int i=0;i<4;i++)
	{
		cout<<m[i]<<endl;
	}
	return 0;
}

输入:C++ program
输出:C++ program

六、C中介绍的fgets()
1.函数原形:fgets(字符数组首地址(或指针),限定读入的字符个数,文件名(或stdin(标准输入))
需包含头文件<stdio.h>;
2.说明:fgets()函数读取整行输入,把换行符放在字符末尾(假设输入行不溢出),通常与fputs()配对使用。(fputs(字符数组名,文件名(或stdout(标准输出)):不在字符串末尾添加换行符)

#include<stdio.h>
int main(void)
{
	char words[20];
	fgets(words,20,stdin);
	fputs(words,stdout);
	return 0;

输入:apple pie
输出:apple pie

七、Attentions
1、cin.getline()属于iostream流,而getline()属于string流,是不一样的两个函数
2、在cin.get(),cin.getline(),getline()使用之前出现“使用cin>>输入数据”,为避免读入之前输入数据结束的回车键,应在前后者间加入cin.ignore()或cin.get()用于吸收上一次输入的回车符(将回车符作为输入流cin以清除缓存),如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。
3、cin.getline(arr,size)与cin.get(arr,size)的区别
cin.get(arr,size(,ch))当遇到Enter时会结束目前输入,他不会删除缓冲区中的[enter]
cin.getline(arr,size(,ch))当遇到Enter时会结束当前输入,但是删除缓冲区中的[enter]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cin、cin.getline()、getline()、cin.get()、gets()、fgets()的用法区别 的相关文章

随机推荐