- xiao9di 的博客
第3课 格式化输入输出
- 2022-7-11 11:33:48 @
1. 输入输出
1.1 C++输入输出方式
cin
的功能是从键盘读取内容,>>
像箭头,把读取到的内容依次传给后面的变量。
int x, a, b; // 定义了3个整型变量
cin>>x; // 从键盘上输入一个数值,并把它传给x
cin>>a>>b; // 可以连续向多个变量输入值
cout
的功能是向屏幕上输出内容,<<
像箭头,把变量的值传到屏幕上。
cout<<x<<endl; // 把变量x的值输出到屏幕上,并且最后输出一个endl来换行
cout<<a<<" "<<b; // 把a和b的值都输出到屏幕上,并且用一个空格隔开
1.2 C语言输入输出方式(格式化输入输出)
格式化输入scanf
。如果想输入时间格式,也就是用:
隔开3个整数,可以使用scanf
,例如
int a, b, c; // 定义3个整型变量
scanf(“%d:%d:%d”, &a, &b, &c); // 从键盘输入3个整数,并用:隔开。&是地址符,加在变量前面可以获取到变量的地址
格式化输出用printf
。如果想输出一些格式化的内容,例如输出一个整数,但是最小宽度是4(也就是说当数字长度不够4时,前面需要补空格;例如数字是3,那么输出<span> </span> 3
,而1000
输出1000
就可以了),可以使用printf
,例如
printf("%4d", a, b, c); // %4d表示输出一个int类型整数,当宽度不够4时,前面自动补空格。
// 那如果我希望前面补的不是空格,而是数字0呢? 只需要把%4d改成%04d
注意,%d
只能用于int
类型的变量格式化输出,那其它类型都用什么符号来表示呢?
格式控制符 | 解释 |
---|---|
%d |
用于输入或输出int 类型的变量 |
%lld |
用于输入或输出long long 类型的变量,注意中间是两个字母l ,不是数字11 |
%?d 或%?lld |
实际使用时,将? 替换成一个数字,代表当输出的变量宽度不够? 时,会在变量前面用空格补充。那能不能在变量后面用空格补充?可以,? 前面加个减号。例如%-4d 。那能不能不用空格补充,而是用0 补充 ?可以,? 前面加个0 ,例如%-04d 。 |
%f |
用于输入或输出float 类型和double 的变量 |
%?.?f |
用于在输出时控制小数的格式,实际使用时需要将两个? 替换成数字(也可以不写)。第1个问号代表数字宽度,第2个问号代表小数点后的位数。例如,变量double a=3.16; ,当执行printf("%4.1f", a); 时,屏幕上会输出 3.2 (前面有一个空格补位)。注意四舍五入。再例如,变量double b=4.72; ,当执行printf("%.1f", b); 时,屏幕上会输出4.7 (前面没有补位)。注意四舍五入。 |
%c |
用于输入或输出字符类型(char 类型),例如字符a 。 |
1.3 特别注意
cin
和cout
的缺点是: =速度慢= 。如果题目有大量的输入输出,有可能会超出题目的时间限制。有两种解决方法:
- 只使用C语言的输入输出方法(
scanf
和printf
)。 - 在
main
函数开头写一句ios::sync_with_stdio(false);
但是代码中不能再使用scanf
、printf
,否则将会混乱。
原因分析:cin
、cout
和C语言中的scanf
、printf
在内部是两种不同的输入输出方式,开发者们为了能够同步这两套输入输出方式,增加了同步机制,导致cin
、cout
速度很慢。而ios::sync_with_stdio(false);
这条语句的作用是取消这两套方式的同步机制,所以cin
、cout
就像脱缰的野马,不用再等着scanf
和printf
,速度很快。但程序中不能再使用 scanf
、 printf
。
举个例子来看一下
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false); // 取消两种输入输出机制的同步
int n, a, b;
cin >> n >> a >> b;
cout << n << " " << a << " " << b << endl;
return 0;
}