目录
一、文件的打开与关闭
(一)文件指针
(二) 文件的打开和关闭
二、文件的顺序读写
(一)fputc
1. 介绍
2. 举例
(二)fgetc
1. 介绍
2. 举例1
3. 举例2
(三) fputs
1. 介绍
2. 举例
(四)fgets
1. 介绍
2. 举例
(五)fprintf
1. 介绍
2. 举例
(六)fscanf
1. 介绍
2. 举例
(七)区分scanf,printf;fscanf,fprintf;sscanf,sprintf
一、文件的打开与关闭
(一)文件指针
- 缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。
- 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名FILE
- 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。
- 一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。
- 下面我们可以创建一个FILE*的指针变量
FILE* pf;//文件指针变量
- 定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件
(二) 文件的打开和关闭
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//打开文件
FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
二、文件的顺序读写
功能 | 函数名 | 适用于 |
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输出流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输出流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输出流 |
二进制输入 | fread | 文件 |
二进制输出 | fwrite | 文件 |
(一)fputc
1. 介绍
int fputc( int c, FILE *stream );
2. 举例
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//打开文件
FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//写文件---输出操作
fputc('g', pf);
fputc('h', pf);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
(二)fgetc
1. 介绍
int fgetc( FILE *stream );//读取错误或者读到文件末尾返回EOF
//读取正确返回字符的assic码值
2. 举例1
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//打开文件
FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//读文件---输入操作
int ch = 0;
while ((ch=fgetc(pf))!=EOF)
{
printf("%c ", ch);
}
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
3. 举例2
(三) fputs
1. 介绍
int fputs( const char *string, FILE *stream );
2. 举例
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//打开文件
FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//写文件---写一行
fputs("qaz",pf);
fputs("wsx", pf);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
(四)fgets
1. 介绍
2. 举例
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
char arr[200] = "xxxx";
//打开文件
FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//读文件---读一行
fgets(arr, 3, pf);
printf("%s", arr);
/*while (fgets(arr, 199, pf) != NULL)
{
printf("%s", arr);
}*/
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
(五)fprintf
1. 介绍
2. 举例
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct Stu
{
char name[20];//姓名
int age;//年龄
double d;//分数
};
int main()
{
struct Stu s = { "张三",19,78.6 };
//打开文件
FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "w");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//写文件
fprintf(pf, "%s %d %lf", s.name, s.age, s.d);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
(六)fscanf
1. 介绍
2. 举例
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct Stu
{
char name[20];//姓名
int age;//年龄
double d;//分数
};
int main()
{
struct Stu s = { "张三",19,78.6 };
//打开文件
FILE* pf = fopen("C:\\Users\\86173\\Desktop\\data.txt", "r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//读文件
//类比scanf("%s %d %lf", s.name, &(s.age), &(s.d));
fscanf(pf,"%s %d %lf", s.name, &(s.age), &(s.d));
printf("%s %d %lf", s.name, s.age, s.d);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}
(七)区分scanf,printf;fscanf,fprintf;sscanf,sprintf
- scanf:格式化的输入函数
- printf:格式化的输出函数
- fscanf:针对所有输入流的格式化的输入函数
- fprintf:针对所有输出流的输出函数
- sscanf:把一个字符串转换成格式化的数据
- sprintf:把一个格式化的数据转换成字符串
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
struct Stu
{
char name[20];//姓名
int age;//年龄
double d;//分数
};
int main()
{
struct Stu s = { "张三",21,47.7 };
char buf[200] = { 0 };
struct Stu tmp = { 0 };
sprintf(buf, "%s %d %lf", s.name, s.age, s.d);
printf("%s\n", buf);
//从buf字符串中提取结构体数据
sscanf(buf, "%s %d %lf", tmp.name, &(tmp.age), &(tmp.d));
printf("%s %d %lf", tmp.name, tmp.age, tmp.d);
return 0;
}