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文件

 #include <stdio.h>

 int main()
{
freopen("data.in", "r", stdin);
//freopen("data.out", "w", stdout);
/* 中间按原样写代码,什么都不用修改 */ fclose(stdin);
//fclose(stdout);
return ;
//提交代码时只需要注释掉这四句话即可。

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

 #include <fstream>
streambuf *backup= cin.rdbuf(); //备份标准输入
ifstream fin;
fin.open("data.in");
cin.rdbuf(fin.rdbuf());
// ... cin will read from file cin.rdbuf(backup); // restore cin's original streambuf

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


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

pass

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

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


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

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

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

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

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

 while(cin>>n)
{
for(i=;i<n;i++)
{
cin>>a>>b;
//处理;
}
}
 while True:
try:
tcase = int(raw_input().strip())
for case in range(tcase):
a, b = map(int, raw_input().strip().split()) #pass
except EOFError:
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中的处理情况
   

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

  1. 在.net中读写config文件的各种方法

    阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collec ...

  2. android 中获取视频文件的缩略图(非原创)

    在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...

  3. 在Shell中使用函数文件

    需要编写一个较庞大的脚本时,可能会涉及许多函数.变量.这是通常建议将众多的函数.变量放入一个单独的脚本内.这样做的好处很明显,不用担心某个函数.变量是否已经被定义和使用,也不用频繁地定义.清除函数和变 ...

  4. java 从jar包中读取资源文件

    在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码: Jav ...

  5. [转载]解析WINDOWS中的DLL文件---经典DLL解读

    [转载]解析WINDOWS中的DLL文件---经典DLL解读 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! ...

  6. python中逐行读取文件的最佳方式_Drupal_新浪博客

    python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式    (2010-08-18 15:59:28)    转载▼    标签:    python   ...

  7. (转)java 从jar包中读取资源文件

    (转)java 从jar包中读取资源文件 博客分类: java   源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...

  8. Eclipse创建第一个Servlet(Dynamic Web Project方式)、第一个Web Fragment Project(web容器向jar中寻找class文件)

    创建第一个Servlet(Dynamic Web Project方式) 注意:无论是以注解的方式还是xml的方式配置一个servlet,servlet的url-pattern一定要以一个"/ ...

  9. Apache 中httpd.conf文件配置详解(转载)

    httpd.conf文件配置详解   Apache的基本设置主要交由httpd.conf来设定管理,我们要修改Apache的相关设定,主要还是通过修改httpd.cong来实现.下面让我们来看看htt ...

随机推荐

  1. Eclipse的快捷键

    Ctrl+Shift+L调出eclipse的所有快捷键 不定期更新2016#8#19 如何配置快捷键:windown-preferences-General-key 一些操作  Ctrl+D   删除 ...

  2. CentOS 7 Git安装

    Git安装 yum -y install git 安装后,在srv目录下建立Git的目录. 初始化一个git空仓库 git init --bare project.git 增加用于访问git仓库的用户 ...

  3. java json数据的处理

    // 返回documentBuilderFactory对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); ...

  4. (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)

    --------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...

  5. a标签填充父容器

    body>div>a{Join} div{ width:150px; height:35px; } a{ display:block; line-height:35px; height:3 ...

  6. OnlineTV 电视播放工具

    通过网络使用电脑收看电视节目的播放工具,跟其他播放软件不同的是增加了录制功能. getList_bin_src.7z 获取电视直播源 OnlineTV-20161005.tar.xz OnlineTV ...

  7. Django~待解决的问题

    1.一个Model.py中简单调用多个数据库,不写数据库路由

  8. Ansible Ubuntu 安装部署

    一.安装: $ sudo apt-get install ansible 二.配置: a.基本配置 $ cd /etc/ansible/ $ sudo cp hosts hosts_back 备份一个 ...

  9. 安卓真机调试 出现Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE....

    [2016-08-20 14:38:39 - hybrid-android] Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE[2016-0 ...

  10. oracleDBA-D4

    1.数据字典: 创建和维护的可修改的系统表..它存放有关数据库和数据库对象的信息. 数据字典=基表+字典视图 2.数据字典所存放的信息: 数据库的逻辑和物理结构(如:表空间和数据文件),数据对象定义的 ...