一、fopen
fopen是C语言中的标准输入输出函数,被包含在<stdio.h>中。
C语言中,用fopen来打开文件。
函数声明:FILE * fopen(const char * path, const char * mode);
path表示文件的路径,可用当前路径或绝对路径,若文件名之前没加路径,表示当前工程所在的路径。
mode表示使用文件方式,是文件的类型和操作要求,有如下几种:
r(read):只读;
w(write):只写;
a(append):追加;
t(text):文本文件,可省略;
b(binary):二进制文件。
+ :读和写
例1
#include <stdio.h>
int main()
{
FILE *fp1, *fp2; //定义文件指针类型
// input.in文件中放了两个整数
fp1 = fopen("input.in","r"); //用fopen函数以只读方式(r)打开输入文件input.in;
fp2 = fopen("output.out","w");//用fopen函数以写入方式(w)打开输出文件output.out;
int a, b;
fscanf(fp1, "%d %d", &a, &b);//fscanf从文件中读取数据,fp1文件指针指定文件;
fprintf(fp2, "%d", a + b);//fprintf将数据输出到文件,fp2文件指针指定文件;
fclose(fp1);//关闭文件指针。
fclose(fp2);
return 0;
}
在启用fopen函数时,需要特定的函数fscanf,fprintf对文件操作;普通的scanf和printf依然能在命令行界面操作。
最后要用fclose关闭文件。
二、freopen
freopen中的re代表redirect,重定向。
freopen()函数重定向了标准流,使其指向指定文件,因此不需要修改scanf和printf。
所谓重定向输出,就是可以把原本只是输出在控制台的字符,输出到你指定的路径文件中。(输入类似,就是从指定的文件中读取,而不是读取在控制台中的输入。)
重定向函数可以在任何时候开启、关闭。
函数名:freopen
标准声明:FILE *freopen( const char *path, const char *mode, FILE *stream );
所在文件: <stdio.h>
参数说明:
path: 文件名,用于存储输入输出的自定义文件名。
mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。
stream: 一个文件,通常使用标准流文件。
返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。
功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。
例2
#include <stdio.h>
int main()
{
int a,b;
// in.txt中有三行数:
// 10 20
// 11 22
// 12 24
freopen("D:\\in.txt","r",stdin); //输入重定向,输入数据将从D盘根目录下的in.txt文件中读取
freopen("D:\\out.txt","w",stdout); //输出重定向,输出数据将保存在D盘根目录下的out.txt文件中
while(EOF != scanf("%d %d",&a,&b))
{
// 把30,33,36分成三行写入out.txt中
printf("%d\n",a+b);
}
return 0;
}
注意:如果是Linux/Ma
例3
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
int a, b;
freopen("D:\\in.txt","r", stdin); //输入重定向,输入数据将从D盘根目录下的in.txt文件中读取
freopen("D:\\out.txt","w", stdout); //输出重定向,输出数据将保存在D盘根目录下的out.txt文件中
while(cin >> a >> b)
{
cout << a + b << endl;
}
return 0;
}
这里stdin和stdout包含在stdio.h中,所以得包含stdio.h或cstdio。
在windows系统中,控制台的名称为"CON", Unix/Linux系统中,控制台的名称为"/dev/console",所以随时可重定向回控制台
例4
#include <stdio.h>
int main()
{
int a,b;
// in.txt中有三行数:
// 10 20
// 11 22
// 12 24
freopen("D:\\in.txt","r",stdin); //输入重定向,输入数据将从D盘根目录下的in.txt文件中读取
freopen("D:\\out.txt","w",stdout); //输出重定向,输出数据将保存在D盘根目录下的out.txt文件中
while(EOF != scanf("%d %d",&a,&b))
{
// 把30,33,36分成三行写入out.txt中
printf("%d\n",a+b);
}
freopen("CON","r",stdin);
freopen("CON","w",stdout);
// 在控制台输入两个数并输出结果
scanf("%d %d", &a, &b);
printf("%d", a + b);
return 0;
}
三、ifstream和ofstream
ifstream和ofsteam是C++中标准的文件输入流和文件输出流。
例5
#include <fstream>
using namespace std;
int main()
{
ifstream fin("../in.txt"); // ..表示上级目录,.表示当前目录
ofstream fout("../out.txt");
int a, b;
fin >> a >> b;
fout << a + b << endl;
return 0;
}
四、总结
C/C++总共有五种输入输出方式
(1)C++控制台cin/cout
(2)C语言控制台scanf/printf
(3)C++文件ifstream/ofstream
(4)C语言文件fopen/fscan/fprintf/fclose
(5)C语言重定向freopen
TopCoder & Codeforces & AtCoder交流QQ群:648202993
更多内容请关注微信公众号
wechat_public_header.jpg
网友评论