一直被简单的输入输出问题困扰很久,因为看到的许多博客都是针对每个输入输出的函数讲解,总结一下竞赛或者平常学习常用到的叭
1.对于输入输出有缓冲区,即空格,回车,制表符tab都会被保留在缓冲区中,称之为三剑客
2.有时候我们需要输入空格,有时候不需要,所有也要进行讨论,但是目前遇到的题目还没有遇到输入回车和制表符的…
1.输入字符
//cin的输入
char a;
cin>>a;
//scanf的输入
char a[2];
scanf("%s",a);
printf("%s",a);
2.输入字符串
2.1char数组
char a[20];
//不要用,会出现离谱的现象
cin>>a;
//输入无空格的char []
scanf("%s",a);
//输入有空格的char []
cin.getline(a,长度);
//这里要万分注意,输入进数组的长度是min(getlien里面的数字-1,数组长度-1)
//e.g.cin.getline(a,100)的话输入进数组的字符只有19个,而cin.getline(a,5)的话输入进输入进数组的长度只有4个
2.2string
string a;
//尽量不要用,我也不知道为啥..
scanf("%s",a.c_str());
//输入无空格的string
cin>>a;
//输入有空格的string
getline(cin,a);
3.综上
//日常一共会用到7种输入输出函数
//scanf printf puts cin cout cin.getline getline
//主要是输入函数
//cin.getline和getline在碰到回车后停止,同时回车不会留在缓冲区
//scanf和cin遇到回车后停止,同时回车也不会留在缓冲区,但是空格会留在缓冲区内
4.cin,scanf,cout,printf
1.用scanf和printf之前要加上cstdio头文件
2.在输入数据超过1e5的时候用scanf和printf会更快,比ios::sync_with_stdio(false)还快
3.scanf输入中,如果碰到一些希望跳过的字符,e.g.输入2020/01/01,用scanf(“%d/%d/%d”,&a,&b,&c),此时不能用cin
4.scanf输入中,如果碰到一些希望忽略的类型,e.g.输入5 3,只读取3,用scanf(“%*d%d”,&a,&b),此时不能用cin
5.scanf输入中,scanf会自动忽略三剑客,但是在输入字符的时候不会忽略,因此可以用scanf(“%d %c”,&a,&b)跳过这个空格
6.gets用于char[]但是也不要用,fgets太麻烦