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>而调用其中函数不会报警,但正式提交时会挂掉,记的手动添加。

  另外,在实际运用中还可能用到fstream等操作,但由于重要程度不高,所以暂且不表。

原文地址:https://www.cnblogs.com/randomaddress/p/11297880.html