2019/8/4 数据输入/输出
数据输入/输出
对于一个能够正常运行的程序来说,快速正确输入数据是必不可少的环节。在OI中,这也是一项基本技能。这次我来总结一下OI中常出现的数据输入/输出操作。
//格式实例中变量名用x替代。
1.cin/cout
头文件:<iostream>/<iostream.h>
正式名称为输入/输出流。可广泛运用于直接输入/输出多种类型数据。使用方便简单,但耗时长,效率较stdio慢很多(3~4倍)。
格式:cin >> x;
cout << x;
骚操作:ios::sync_with_stdio(false);
关闭iostream与stdio同步,加快cin/cout速度(但好像还是比scanf/printf慢一点点)。
2.scanf/printf
头文件:<cstdio>/<stdio.h>
正式名称为标准输入/输出。可用于按格式直接输入/输出多种数据。使用较繁琐,耗时短。
格式:scanf ("标识符与格式" ,&x)
printf (" 标识符与格式",x)
3.自制快读/快输
基于头文件:<cstdio>/<stdio.h>中的getchar ( )/putchar( )函数。
速度快(优于scanf/printf),只能用于输入数字,用于数据较多场合。
格式:x = re( );
wr( x ) ;
代码:
快读
1 long long re() 2 { 3 char c=getchar();long long res=0;int fg=1;//res 初值赋 0 , 1会炸 4 while('0'>c||c>'9') 5 { 6 if(c=='-')fg=-1; 7 c=getchar(); 8 } 9 while('0'<=c&&c<='9') 10 res=((res<<3)+(res<<1)+c-'0'),c=getchar(); 11 return res*fg; 12 }
快输
void wr(int x) { if(x<0) { putchar('-'); x=-x; } if(x>=10)wr(x/10); putchar(x%10+'0'); }
//还有名为超级快读的玩意由于太巨了就不介绍了
4.freopen
头文件:<cstdio>/<stdio.h>
用于重定向输入输出流。可以在不改变其他代码的前提下改变输入/输出环境(将数据输出到文件)。在OI比赛与调试中经常用到。
格式:freopen("文件名","访问权限",需重定向文件流)
注:"访问权限"一般为" r"(只读)或"w"(只写),重定向文件流一般为stdin(标注输入流)或stdout(标注输出流)。
“在TC2.0中,允许不引用此头文件而直接调用其中的函数,但这种做法是不标准的。也不建议这样做。以避免出现在其他IDE中无法编译或执行的问题。”------百度百科"stdio.h"词条
在某些编译环境中不加头文件<cstdio>而调用其中函数不会报警,但正式提交时会挂掉,记的手动添加。