引入:https://blog.youkuaiyun.com/xavierdarkness/article/details/80638641
两个函数都需要输入文件
我们先要在自己的D盘建立一个输入文件:
input文件夹:里面包含:1的文件
就是用记事本事先吧你要输入的数据放在那里,我们打开文件夹就是这样的:
这个文件里面有我们要输入的数据:
6
7 7 2 0 0 2
现在先使用fopen函数打开:
#include<bits/stdc++.h>
using namespace std;
long long int mod=1000000007;
int main(void)
{
int n;
long long int a[105];
//fopen中: r是打开文件只读 w 是只进行写
FILE *fp;
fp=fopen("D:\\input\\1.txt","r+");
fscanf(fp,"%d",&n);
for(int i=1;i<=n;i++){
fscanf(fp,"%lld",&a[i]);
}
long long int sum=0ll;
sum=a[1]+a[n];
//此时文件内是6
//7 7 2 0 0 2
printf("%lld\n",sum);//输出sum
fprintf(fp,"%d",n);//写入n
for(int i=1;i<=n;i++){
fprintf(fp,"%lld",a[i]);//写入a[i],a[i]没变,
}//fprintf函数的作用是把数据写入文件内
//现在是6
//7 7 2 0 0 26772002
//fprintf把n,a[i]的值写入文件内
fclose(stdin);
return 0;
}
我们可以看到用用fopen()函数打开的文件,我们录入文件时还要特意去更改程序的输入方法,scanf()->fscanf();而freopen则不用
feropen:
#include<bits/stdc++.h>
using namespace std;
long long int mod=1000000007;
int main(void)
{
int n;
long long int a[105];
freopen("D:\\input\\1.txt","r",stdin);//stdout(Standardoutput)标准输出 stdin(Standardinput)标准输入
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
long long int sum=0ll;
sum=a[1]+a[n];
printf("%lld\n",sum);
fclose(stdin);
return 0;
}
输出都是9
freopen和fopen都可以读取文件到程序,但是后者需要将scanf()改为fscanf()才能正常使用,前者则不用。看来freopen函数更方便点。
补充1:
如果你还想更简单的又不必大动干戈修改程序,那么你可以用
freopen("D:\\input\\1.txt","w",stdout);//stdout(Standardoutput)标准输出 stdin(Standardinput)标准输入
其中stdout(Standardoutput)标准输出是输出到磁盘,就是录入文件内, stdin(Standardinput)标准输入是输出到屏幕上,如最后一个程序,我们改一句话,输入(手动)
6
7 7 2 0 0 2
就是把答案 9 写进文件,而屏幕上不显示
#include<bits/stdc++.h>
using namespace std;
long long int mod=1000000007;
int main(void)
{
int n;
long long int a[105];
freopen("D:\\input\\1.txt","w",stdout);//stdout(Standardoutput)标准输出 stdin(Standardinput)标准输入
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
long long int sum=0ll;
sum=a[1]+a[n];
printf("%lld\n",sum);
fclose(stdin);
return 0;
}
运行结果为屏幕上没有输出,文件1.txt里面内容只有一个9。
补充2:
如果你想实现一个文件读,一个文件(1.txt)输入,一个文件(2.txt)写入相应结果数据的话,可以写两句
freopen("D:\\input\\1.txt","r",stdin);//将1.txt作为程序的标准输入
freopen("D:\\input\\2.txt","w",stdout);//将2.txt作为程序的标准输出
文件结构如下图:
代码(将输入的输入的头尾相加输出):
#include<bits/stdc++.h>
using namespace std;
long long int mod=1000000007;
int main(void)
{
int n;
long long int a[105];
freopen("D:\\input\\1.txt","r",stdin);//将1.txt作为程序的标准输入
freopen("D:\\input\\2.txt","w",stdout);//将2.txt作为程序的标准输出
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
long long int sum=0ll;
sum=a[1]+a[n];
printf("%lld\n",sum);
fclose(stdin);
fclose(stdout);
return 0;
}
运行结果如下:
输入文件1.txt:
输出文件2.txt:
这样便可实现一个程序的输入和输出都是到文件,而不用自己输入,同时程序也不用另外修改输入输出函数。