众所周知,C++是在C上面延伸的,并引入面向对象的思想。
今天我们不讨论面向对象思想,讨论一些简单的输入输出函数,
C++很多输入输出函数也可以引用C语言的,所以这边我们做一个总结:

输入函数

1、cin

  • 最基本,也是最常用的方法,接收一个字符,整形或字符串
  • 遇到回车,TAB或空格结束
#include <iostream>
using namespace std;
int main()
{
	char a[20];
	cin >> a;
	cout << a << endl;
	return 0;
}

输入:jkljkljkl
输出:jkljkljkl //遇回车结束
输入:jkljkl jkljkl //遇空格结束
输出:jkljkl

2、cin.get()

  • 用法1:cin.get(字符变量名),可以用来接收单个字符
#include <iostream>
using namespace std;
int main()
{
	char ch;
	ch = cin.get();
	//也可以这样
	//cin.get(ch); 效果一样
	cout << ch;
	return 0;
}

输入:jljkljkl
输出:j

  • 用法2:cin.get(字符数组名,接收字符的数目),可以用来接收一行字符串,可以包含空格
#include <iostream>
using namespace std;
int main()
{
	char ch[20];
	cin.get(ch,20);
	cout << ch;
	cout << endl;
	return 0;
}

输入:jkl jkl jkl
输出:jkl jkl jkl
输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd (接收19个字符+1个‘\0’)

3、cin.getline()
原型:cin.getline(字符指针(char*),字符个数N(int),结束符(char));
cin.getline(字符指针(char*),字符个数N(int))

  • 接收一行字符串,可以包含空格,与cin.get()用法2效果一样
  • 主要适用于数组字符串,没有设置结束符默认以回车结束
  • cin.getline()属于istream流
#include <iostream>
using namespace std;
int main()
{
	char ch[5];
	cin.getline(ch, 5);
	cout << ch;
	cout << endl;
	return 0;
}

输入:jkljkljkl
输出:jklj
接受5个字符到m中,其中最后一个为’\0’,所以只看到4个字符输出;
如果把5改成20:
输入:jkljkljkl
输出:jkljkljkl
输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf

4、getline()
原型:istream& getline ( istream &is , string &str , char delim(结束符) );
istream& getline ( istream &is , string &str );

  • 头文件:#include
  • 用法:可以接收空格并输出,和cin.getline()类似,但cin.getline()属于istream流,getline()属于string流
  • getline(cin,s)获取一行字符串。
// getline with strings
#include <iostream>
#include <string>
using namespace std;
int main () {
  string str;
  cout << "Please enter full name: ";
  getline (cin,str);  //以回车为结束符
  cout << "Thank you, " << str << ".\n";
} 

这里需要注意一个点:如果在getline(cin,str)前面输入了一个回车,则getline(cin,str)将不会被执行,因为这个回车会被当作按行读取的结束符,结束了getline(cin,str)的按行读取字符串,所以导致了getline(cin,str)没有读取任何字符串就结束了。解决这个问题的办法就是在回车后面加上cin.ignore();就会将回车键忽略掉,例子:

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

geline()这个函数坑比较多,多补充几个知识点,如若我们要多次输入多行的字符串,并打印到窗口,怎么做呢?

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

这样可以无休止的输入输出字符串,但是我们要这么结束这一切呢?
只要输入Ctrl+z,即可退出循环,因为Ctrl+z是结束流的标志,而回车只是停止cin对流的读取操作,也可以自己指定字符停止流的读取操作,所以不要以为回车可以退出循环,而有些地方说到的EOF可以退出循环,我也不太清楚不知道是怎么做到的,这个函数的返回值是一个流的引用,而EOF:是end of file的缩写,是定义在<stdio.h>里面的一个宏定义#define EOF (-1),如果有大佬知道是怎么做到的告诉告诉小弟 。
4、gets()
原型:char * gets ( char * str );

  • 接受一个字符串,可以接收空格并输出,需包含“#include”
#include<iostream>
#include<string>
using namespace std;
int main()
{
	char m[20];
	gets(m);		//不能写成m=gets();
	cout << m << endl;
}

输入:jkljkljkl
输出:jkljkljkl
输入:jkl jkl jkl
输出:jkl jkl jkl

5、getchar()
原型:int getchar(void)

  • 接受一个字符,这个函数在标准C里面就有,在C++里也有,是getc()的宏定义
#include<iostream>
#include<string>
using namespace std;
int main ()
{
	char ch;
	ch = getchar(); //不能写成getchar(ch);
	cout<<ch<<endl;
}

输入:jkljkljkl
输出:j
C/C++毕竟是比较古老的东西,单单输入函数就有这么多种
真的挺让人头大的,有写的不好的地方希望有大佬可以指教指教。
常见的输出函数见下一篇吧。