文件系统知识
文件的读写操作
代码实操:单个字符
行读写
#include<stdio.h>
void main(){
char arr[100];
FILE*ch=fopen("tes.txt","r");
FILE*pf=fopen("test.txt","w");
if(ch==NULL){
return 0;
}//文本行输入
fgets(arr,100,ch);//三个参数分别代表:1.把读取的数据存到arr;2.最大读取数量3.从ch中读取
printf("%s",arr);//此处会换行是因为读取字符串时会把文档的‘\n’也读取进去
fgets(arr,100,ch);//而puts自带换行
printf("%s",arr);//因为文档内容到第二行就结束了,所以不会换行
puts(arr);
fclose(ch);
ch=NULL;
//文本行输出
if(pf==NULL)
return 0;
fputs("hello",pf);//两个参数分别表示:1.输入内容/从哪里输入2.pf接收内容
fputs(arr,pf);//没有换行哦
fclose(pf);
pf=NULL;
}
输入结果 输出到文本的结果
以格式化形式输入输出
#include<stdio.h>
struct U{
int n;
float score;
char arr[10];
};
void main(){
//fprintf和fscanf(所有流)
//printf是针对标准输出流,scanf是针对标准输入流
struct U u={0};
struct U n1={3,3.14f,"fafwfwa"};
FILE*pf=fopen("hrazers.txt","r");
FILE*pd=fopen("hrazy.txt","w");
if(pf==NULL||pd==NULL)
return 0;
//以格式化的形式写文件
fprintf(pd,"%d %f %s",n1.n,n1.score,n1.arr);
//格式化的输入数据
fscanf(pf,"%d %f %s",&(u.n),&(u.score),u.arr);//从pf读取数据写到结构体中
printf("%d %f %s",u.n,u.score,u.arr);
fclose(pf);
pf=NULL;
}
写文件 输入数据
文件打开会生成三个默认流
标准输入流和输出流实操
#include<stdio.h>
#include<string.h>
void main(){
char bf[100];
int ch =fgetc(stdin);//从键盘输入
fputc(ch,stdout);//由屏幕输出
fflush(stdin);
fflush(stdout);
//从键盘读取一行文本
fgets(bf,100,stdin);//从标准输入流读取
fputs(bf,stdout);//输出到标准输出流
fflush(stdin);
fflush(stdout);
//等价于
gets(bf);//从标准输入流读取
puts(bf);//输出到标准输出流
}
可以从标准输入流读信息,也可以直接输出到标准输出流
三组函数对比
sscanf/sprintf实操
#include<stdio.h>
struct U{
int n;
float score;
char arr[10];
};
void main(){
struct U u={3,3.14f,"afbahfbaw"};
struct U tmp;
char buf[100];
sprintf(buf,"%d %f %s",u.n,u.score,u.arr);//将格式化的数据转换成字符串存入buf
printf("%s\n",buf);
sscanf(buf,"%d %f %s",&(tmp.n),&(tmp.score),tmp.arr);//将buf中的数据以格式化的形式读取
printf("%d %f %s\n",tmp.n,tmp.score,tmp.arr);
}