文件的概念
文件,是根据特定的目的而收集在一起的有关数据的集合。
万物皆文件
C/C++ 把每个文件都看成是一个有序的字节流,每个文件都以 文件结束标志(EOF)结束。
文件的操作步骤
- open the file. 将文件指针指向文件,决定打开文件类型;
- 对文件进行读、写操作;
- 使用完,close file.
freopen 函数
将输入输出流以 指定方式 重定向到文件,包含在头文件 stdio.h(cstdio)
函数主要有三种方式: 读、写和附加
命名格式
1
| FILE* freopen(const char* filename, const char* mode, FILE* stream);
|
参数说明
- filename
- mode: 设置文件打开模式
- stream: 文件指针,标准文件流(stdin/stdout)活标准错误输入流(stderr)
- 返回值:文件指针,指向被打开文件
文件打开模式
使用方法
读入文件内容
1 2
| freopen("data.in","r", stdin);
|
输出到文件
1 2
| freopen("data.out","w",stdout);
|
关闭标准输入/输出流
1 2
| fclose(stdin); fclose(stdout);
|
模板
1 2 3 4 5 6 7 8 9 10 11 12
| #include <cstdio> #include <iostream> int main(void) { freopen("data.in", "r", stdin); freopen("data.out", "w", stdout);
fclose(stdin); fclose(stdout); return 0; }
|
fopen函数(选读)
函数大致与 freopen 相同,函数打开指定文件并返回打开文件的指针
函数原型
1
| FILE* fopen(const char* path, const char* mode)
|
可用读写函数(基本)
- fread/fwrite
- fgetc/fputc
- fscanf/fprintf
- fgets/fputs
使用方式
1 2 3 4 5 6 7 8
| FILE *in, *out; in = fopen("data.in", "r"); out = fopen("data.out", "w");
fclose(stdin); fclose(stdout);
|
C++ 的 ifstream/ofstream 文件输入输出流
使用方法
读入文件内容:
1 2
| ifstream fin("data.in");
|
输出到文件:
1 2
| ofstream fout("data.out");
|
关闭标准输入/输出流
1 2
| fin.close() fout.close()
|
模板
1 2 3 4 5 6 7 8 9 10 11 12
| #include <cstdio> #include <fstream> ifstream fin("data.in"); ofstream fout("data.out"); int main(void) {
fin.close(); fout.close(); return 0; }
|
结构体的构造函数
一个普通定义的结构体,内部会生成默认的构造函数
构造函数
1 2 3 4 5 6
| struct studentInfo{ int id; char gender; studentInfo(){} }
|
有两种相似的表达
正常模式
1 2 3 4 5 6 7 8 9 10
| struct studentInfo{ int id; char gender; studentInfo(int _id, char _gender){ id = _id; gender = _gender; } }
|
单行实现构造函数
单行定义的写法有点像python
1 2 3 4 5
| struct studentInfo{ int id; char gender; studentInfo(int _id, char _gender): id(_id), gender(_gender){} };
|
覆盖机制
构造函数被重新定义后,会遇到默认构造函数被覆盖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| struct studentInfo{ int id; char gender; studentInfo(){} studentInfo(char _gender){ gender = _gender; } studentInfo(int _id, char _gender){ id = _id; gender = _gender; } };
|