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中的处理情况
   

转载于:https://www.cnblogs.com/yushuo1990/p/5952424.html

[ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式...相关推荐

  1. python无法启动该程序因为计算机中丢失_python报错:无法启动此程序,因为计算机中丢失...

    原标题:python报错:无法启动此程序,因为计算机中丢失 python报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll api-ms-win- ...

  2. python无法启动此程序因为计算机中丢失_python报错:无法启动此程序,因为计算机中丢失...

    原标题:python报错:无法启动此程序,因为计算机中丢失 python报错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll api-ms-win- ...

  3. ACM新手之八大输入输出格式

    在ACM题库中,不管是文件输出(输入)还是标准输出(输入),都有着一定的格式,下面我就以杭电1089--1096为例子,简单的介绍一下. 第一种:A+B for Input-Output Practi ...

  4. python自动粘贴文字_在python中自动将文件内容复制到剪贴板并粘贴到纯文本文件中...

    我只想用我写的这个小脚本来解析PDF文件中的数据.在 但是,我似乎遇到了python的问题,更具体地说,PyPDF2模块无法从pdf文件中读取文本.打印出来的数据都是模糊的,基本上不可读.然而,当我打 ...

  5. 小程序中input标签没有反应_解决微信小程序弹出层中input无法聚焦的问题

    此处使用的是vant框架 解决聚焦问题 这里遇到的问题是,在点击搜索框后,设置了弹起的弹出层中van-search的foucs值为true 但是没有起到聚焦效果 原因在于弹出框带有一个动画效果,需要在 ...

  6. python中对数字降序和升序_该程序查找在Python中按升序或降序排列数字的最低成本...

    假设我们有一个称为nums的数字列表,我们必须找到最小成本以任何顺序(升序或降序)对列表进行排序.此处的成本是任何元素的旧值和新值之间的差总和. 因此,如果输入类似于[2,5,4],则输出将为2. 为 ...

  7. 怎么将vue模板转换为html,vue中自定义html文件的模板

    如果默认生成的 HTML 文件不适合需求,可以创建/使用自定义模板. 一是通过 inject 选项,然后传递给定制的 HTML 文件.html-webpack-plugin 将会自动注入所有需要的 C ...

  8. jar中的类文件更新遇到的问题:请分析下原因呢

    1 jar包中的类文件更新后,再打开程序,发现更新的类文件没有生效,程序显示的界面仍然是更新前的界面. 2 并且更奇怪的是将jar包中对应的文件夹删掉后,重新启动运行程序的.exe 文件,发现对应功能 ...

  9. Git的简单使用以及在Django中有关日志文件的忽略

    Git的简单使用以及在Django中有关日志文件的忽略 1.三个程序简介 2.Git配置 2.1Git查看配置 2.2git查看本地系统配置 2.3git查看用户配置的 2.4git配置用户名 2.5 ...

最新文章

  1. 查看linux下各数据类型的大小
  2. vue --- mintUI中Swipe(轮播图)的使用
  3. Spread / Rest 操作符
  4. 【转】GitHub 从单机到联机:玩转 Pull Request
  5. (软件工程复习核心重点)第一章软件工程概论-第四节:软件过程及相关模型
  6. eclipse4.2配置tomcat+jdk
  7. 训练中Loss为Nan的原因,梯度消失或者爆炸的优化
  8. mybatis多种方式注册映射文件
  9. 数据分类分级指南数据服务分类类目表
  10. Tomcat8卸载+重装
  11. cfd 网格划分c语言源程序,ICEM-CFD-网格划分入门 .doc
  12. cityscape 数据集 mmsegmentation训练记录
  13. 批处理从入门到精通_DOS/BAT
  14. 怎么判断两个多项式互素_关于两个多元多项式互素问题
  15. 2021年Android工作或许更难找,面试资料分享
  16. 【ESD专题】2.ESD防护及保护器件(电介质和压敏电阻)
  17. linux之CLUSTER(集群)一
  18. Android自定义注解不被混淆,Android 混淆压缩开启以及自定义混淆规则
  19. 机器学习考点---过拟合与欠拟合、CNN原理......
  20. ArcMap出图小技巧:图例,比例尺,指北针,标题(附练习数据)

热门文章

  1. iphone新旧手机数据传输已取消_如何取消iPhone手机App自动扣费?三种方法让你不再被“偷”...
  2. C语言 | 6种常用的转换工具函数盘点
  3. C语言内存/指针相关
  4. C语言中几个容易踩的“坑”!
  5. C语言预处理命令分类和工作原理
  6. 【lua学习】2.数据类型
  7. 获取客户端ip_代理IP工具能否解决反爬?
  8. php7设置最大连接数,sybase 15.7 修改 number of user connections 最大连接数
  9. 浅析C++的三大循环-以100以内的质数求解为例
  10. 什么是四路串口服务器?