华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1224|回复: 1
打印 上一主题 下一主题

文件输入输出技术

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2019-11-14 11:28:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
平时的训练为了方便大家都是从键盘上读入数据,将结果输出到屏幕上,所以我们一般直接cin,cout。但是标准考试的时候为了电脑自己评测需要,要求选手要使用文件输入输出,一般的做法是使用cstdio库里面的freopen函数。
具体做法如下:以NOIP2017初中组第一题,成绩score为例,平时我们写的程序如下:

  1. #include <iostream>
  2. using namespace std;
  3. int s,a,b,c;
  4. int main()
  5. {
  6.         cin>>a>>b>>c;
  7.         s=a*0.5+b*0.3+c*0.2;
  8.         cout<<s;
  9.         return 0;
  10. }
复制代码

但这样交上去考试肯定得0分,因为题目有要求,

改动如下:
1、在头文件处包含cstdio。
2、main函数头两句写上freopen("文件名","r",stdin);freopen("文件名","w",stdout);就可以了。

  1. #include <iostream>
  2. #include <cstdio>  ///freopen 所在的库
  3. using namespace std;
  4. int s,a,b,c;
  5. int main()
  6. {
  7.         freopen("score.in","r",stdin); ///从文件score.in里面读入数据
  8.         freopen("score.out","w",stdout);///向文件score.out里面写数据
  9.         cin>>a>>b>>c;
  10.         s=a*0.5+b*0.3+c*0.2;
  11.         cout<<s;
  12.         return 0;
  13. }
复制代码

调试的时候我们注释到fropen两句,当作键盘输入屏幕输出来调试,等到结果正确,去掉注释,再编译一下,没有问题在保存上交。
注意,有同学freopen里面r,w,stdio,stdout等还会写错,这就无语了!
回复

使用道具 举报

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
沙发
 楼主| 发表于 2019-11-14 11:35:18 | 只看该作者
注意:
考试时候的文件名都是小写,Linux系统是区分大小写的,不要写错;
读文件是in, r ,stdin   写文件是 out, w, stdout
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-1 18:32 , Processed in 0.130786 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表