众所周知,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++毕竟是比较古老的东西,单单输入函数就有这么多种
真的挺让人头大的,有写的不好的地方希望有大佬可以指教指教。
常见的输出函数见下一篇吧。