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 特别注意

cincout的缺点是: =速度慢= 。如果题目有大量的输入输出,有可能会超出题目的时间限制。有两种解决方法:

  1. 只使用C语言的输入输出方法(scanfprintf)。
  2. main函数开头写一句 ios::sync_with_stdio(false); 但是代码中不能再使用scanfprintf,否则将会混乱。

原因分析:cincout和C语言中的scanfprintf在内部是两种不同的输入输出方式,开发者们为了能够同步这两套输入输出方式,增加了同步机制,导致cincout速度很慢。而ios::sync_with_stdio(false);这条语句的作用是取消这两套方式的同步机制,所以cincout就像脱缰的野马,不用再等着scanfprintf,速度很快。但程序中不能再使用 scanfprintf

举个例子来看一下

#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;
}