输入输出
c++是c语言的进化,所以可以使用c语言的输入输出函数scanf
,printf
,当然c++也有它特有的输入输出方法cin
,cout
。
下面的我们来具体看一下如何输入输出数据
c风格读取代码:
- 输入输出时要指定标记(
%d %f %lf
) - 速度快
- 读取数字的时候会略过不可见字符(空格,换行符)
c++风格读取代码:
- 开启IO不与c同步优化后,快!
- 读取的时候简单,不用记指定的标记
- 格式化输出的时候要写的字多,记的东西多,。
- 在对一些格式化的输出的时间不太好用,例如输出:
number is %8d \n\n,hello world
,但在真实比赛中很少用到
关闭同步的方式:
cpp
std::ios::sync_with_stdio(false);
cin.tie(0); //来解除std::cin和std::cout之间的绑定,提高效率。
1
2
2
c++11以上的语言可以使用如下的匿名函数(Lambda捕获)
cpp
static auto _=[]()
{
ios::sync_with_stdio(false);
cin.tie(0);
return 0;
}();
1
2
3
4
5
6
2
3
4
5
6
读取字符
无论哪种方法读取数字时都会略过不可见字符(空格,换行符),注意
- 如果使用cin读取字符的时候会略过不可见字符
- 如果使用scanf读取字符的时候不会略过不可见字符
plaintext
abc 123 8
newline
hello world
1
2
3
2
3
c++风格
cpp
#include <iostream>
using namespace std;
int main(){
while ( 1 ) { //无限循环
char c;
cin >> c;
cout << "read char is " << c << endl;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
c风格
cpp
#include <cstdio>
int main(){
while ( 1 ) { //无限循环
char c;
scanf("%c",&c);
printf("read char is %c\n",c);
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
读取数字
无论哪种方法(cin,scanf)读取数字时都会略过不可见字符(空格,换行符)
plaintext
1 1.1 2.0
3
4
5
1
2
3
4
2
3
4
cpp
#include <iostream>
using namespace std;
int main(){
int a; //定义一个整型变量a
double b,c;
int x,y,z;
cin >> a >> b >>c; //都写一行太长了,所以换一行写
cin >> x >> y >> z;
//每个数占一行
cout << a << endl;
cout << b << endl;
cout << c << endl;
cout << x << endl;
cout << y << endl;
cout << z << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
c风格数字读取,需要指明要读取的数字的类型(%d,%c,%f等)
cpp
#include <cstdio>
int main(){
int a; //定义一个整型变量a
double b,c;
int x,y,z;
scanf("%d",&a);
scanf("%lf%lf",&b,&c);// %lf表示要读取一个double类型的数
scanf("%d%d%d",&x,&y,&z); // %d表示读取整数
printf("%d %lf %lf\n",a,b,c); // 输出: 1 1.100000 2.000000
printf("%d %d %d",x,y,z); //输出: 3 4 5
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
cout格式化输出
进制相关
std::hex
16进制显示std::oct
8进制显示std::dec
10进制显示
精度相关
std::defaultfloat
默认显示,有几位显示几个小数std::fixed
表示浮点输出应该以固定点或小数点表示法显示,而不是以科学记数字法
fixed 操作符与 setprecision 操作符一起使用时,setprecision 指定浮点数字的小数点后要显示的位数,而不是要显示的总有效数位数。
std::setprecision(n)
宽度相关
std::setw()
指定宽度std::fill(char)
指定填充的字符
cpp
/* author: Rainboy email: rainboylvx@qq.com time: 2021年 04月 22日 星期四 20:52:19 CST */
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+5,maxe = 1e6+5; //点与边的数量
int n,m;
/* 定义全局变量 */
int main(){
int a = 7 ,b = 12,c = 16;
cout << a <<" "<< b <<" "<< c << endl;
cout << hex << a <<" "<< b <<" "<< c << endl;
cout << oct << a <<" "<< b <<" "<< c << endl;
cout << dec << a <<" "<< b <<" "<< c << endl;
cout << setw(5) << a << endl;
cout << setw(10) << b << endl;
cout << setw(10) << setfill('!')<< b ;
double d = 0.1234567;
cout << d << endl;
cout << fixed << setprecision(4) << d << endl; //四舍五入
//cout << setprecision(4) << d << endl; //不用fixed
cout << d << endl;
cout << setprecision(3) ;
cout << d << endl;
cout << setprecision(10) << d << endl; //10位
cout << defaultfloat << d << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
printf格式化输出
- 进制相关
- %x 16进制显示
- %o 8进制显示
- %d 10进制显示
- 精度相关
- %.8lf double类型浮点数,保留8位小数,四舍五入
- %.8f float类型浮点数,保留8位小数,四舍五入
- 宽度相关
printf("%4d",12)
, 4个宽度输出,右对齐printf("%04d",12)
, 4个宽度输出,右对齐,用0补全printf("%-4d",12)
, 4个宽度输出,左对齐
cpp
#include <bits/stdc++.h>
int main(){
int a = 7 ,b = 12,c = 16;
printf("%d %d %d\n",a,b,c); //输出 "7 12 16" 然后换行
printf("%x %x %x\n",a,b,c); //16进制输出
printf("%o %o %o\n",a,b,c); //8进制输出
printf("%5d\n",5); //5个位置,用来输出5
printf("%10d\n",5);//10个位置,用来输出5,右对齐
printf("%-10d\n",5);//10个位置,用来输出5,左对齐
printf("%010d\n",5);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16