zoukankan      html  css  js  c++  java
  • [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式

    ACM中巧用文件的输入输出来改写acm程序的输入输出

    经常有见大神们使用文件来代替ACM程序中的IO,尤其是当程序IO比较复杂时,可以使自己能够更专注于代码的测试,而不是怎样敲输入。


    C/C++代码中:

    使用    stdio.h    中包含的另一个函数freopen函数

    FILE * freopen ( const char * filename, const char * mode, FILE * stream );
    文件名,打开的模式,文件指针,通常使用标准流文件(stdin/stdout/stderr)

    因为文件指针使用的是标准流文件,因此我们可以不定义文件指针。

    freopen("data.in", "r", stdin); //使用freopen()函数以只读方式r(read)打开输入文件data.in

    freopen("data.out", "w", stdout); //使用freopen()函数以写入方式w(write)打开输出文件data.out

    这样我们就不再需要修改scanf和printf,因为freopen()函数重定向了标准流,使其指向前面指定的文件。

    最后只要使用fclose关闭输入文件和输出文件即可。

    fclose(stdin);
    fclose(stdout);

        

        若要恢复句柄,可以重新打开标准控制台设备文件,只是这个设备文件的名字是与操作系统相关的。

        DOS/Win:freopen("CON", "r", stdin);

        Linux:  freopen("/dev/console", "r", stdin);

    //在程序目录下建立两个文件,data.in和data.out文件

     1 #include <stdio.h>
     2           
     3 int main()
     4 {
     5     freopen("data.in", "r", stdin);
     6     //freopen("data.out", "w", stdout);
     7     /* 中间按原样写代码,什么都不用修改 */
     8     
     9     
    10     
    11     
    12     fclose(stdin);
    13     //fclose(stdout);
    14     return 0;
    15
    //提交代码时只需要注释掉这四句话即可。

     而针对于C++的版本则可以这么来写:

     1 #include <fstream>
     2 streambuf *backup= cin.rdbuf(); //备份标准输入
     3 ifstream fin; 
     4 fin.open("data.in");   
     5 cin.rdbuf(fin.rdbuf()); 
     6 // ... cin will read from file
     7 
     8 
     9 
    10 
    11 cin.rdbuf(backup);     // restore cin's original streambuf  

    不过此版本的代码不如上面的C版本的代码简洁,推荐使用C版本的代码!


    最近也常使用Python来写一些在线编程的题目,这里也对应总结一下在Python中的处理方法:

     pass

    其实针对这里的重定向的意义在于方便对程序的输入做一个处理,故而只需要处理输入即可,输出直接输出到控制台上看起来更为直观。

     下面对ACM中的相关输入输出格式做一个总结:


     最常见的输入输出个是大致有八种:

    1、有多组输入数据,但没有具体的告诉你有多少组,只是让你对应每组输入,应该怎样输出

    C/C++中的处理情况 Python中的处理情况
    1 while(cin>>a>>b)
    2 {
    3     //处理;
    4 }
    1 while True:
    2     try:
    3         a, b = map(int, raw_input().strip().split())#这里将前后空格去掉,并且按照空白符进行拆分
    4         #pass5     except EOFError:
    6         break

    2、输入一个整数n,告诉我们接下来有n组数据,然后在输入数据的具体数据

    C/C++中的处理情况 Python中的处理情况
     
    1 while(cin>>n)
    2 {
    3     for(i=0;i<n;i++)
    4     {
    5         cin>>a>>b;
    6         //处理;
    7     }
    8 }
    1 while True:
    2     try:
    3         tcase = int(raw_input().strip())
    4         for case in range(tcase):
    5             a, b = map(int, raw_input().strip().split())
    6         
    7         #pass
    8     except EOFError:
    9         break

    #pass

    3、有多组输入数据,但是没有具体明确有多少组,但是明确当遇见0,0时结束

    C/C++中的处理情况 Python中的处理情况
       

    4、有多组输入数据,但是没有具体明确有多少组,但是明确当遇见0,0时结束

    C/C++中的处理情况 Python中的处理情况
       

    5、有多组输入数据,但是没有具体明确有多少组,但是明确当遇见0,0时结束

    C/C++中的处理情况 Python中的处理情况
       

    6、有多组输入数据,但是没有具体明确有多少组,但是明确当遇见0,0时结束

    C/C++中的处理情况 Python中的处理情况
       

    7、有多组输入数据,但是没有具体明确有多少组,但是明确当遇见0,0时结束

    C/C++中的处理情况 Python中的处理情况
       

    8、有多组输入数据,但是没有具体明确有多少组,但是明确当遇见0,0时结束

    C/C++中的处理情况 Python中的处理情况
       
  • 相关阅读:
    选项卡
    使用script创建标签添加属性值和添加样式
    判断表单不能为空(表格形式的)
    数组
    关于meta元信息元素
    js判断数据类型
    Ising模型的Metropolis模拟中的组态阻塞和振荡
    python 画能级图
    python 调用 shell 命令,制作用户界面
    打包 python 程序,变成一个可执行文件
  • 原文地址:https://www.cnblogs.com/yushuo1990/p/5952424.html
Copyright © 2011-2022 走看看