首先展示一下文件操作的基础
FILE *fp(文件地址,模式);
文件地址: 可以是绝对地址 由于" \ "为转义符所以用的时候要用两个,比如说:E:\\file\\w.txt 当然也可以写成这样 E:/file/w.txt
模式:
模式 | 含 义 | 说 明 |
---|---|---|
r | 只读 | 读取文件(文件必须存在) |
w | 只写 | 若文件存在,则清除原文件内容后写入;否则,会创建一个新文件后写入 |
a | 追加只写 | 若文件存在,接着原文写。 |
r+ | 读写 | 增加了可写的功能(文件必须存在) |
w+ | 写读 | 增加了可读的功能 |
a+ | 写读 | 增加了可读的功能 |
rb | 二进制读 | 同上,不过读出的是二进制 |
wb | 二进制写 | 同上 |
ab | 二进制追加 | 同上 |
rb+ | 二进制读写 | 同上 |
wb+ | 二进制写读 | 同上 |
ab+ | 二进制写读 | 同上 |
从 文件 中读取 字符 赋值给 变量 : fgets(变量名(可以为字符数组),最大获取长度,文件指针);
把 字符数组 输出到 文件 中: fputs (字符数组, 文件指针);
1.题目
从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。
程序分析
☺没有
代码展示
#include<stdio.h>
void main(){
char a;
char file_name[20]="E:/file/w.text";
FILE *fp=fopen(file_name,"ab");
printf("请输入字符(输入#结束):");
while((a=getchar())!='#'){
fputc(a,fp);
}
fclose(fp);
printf("存储完毕!");
}
运行结果
2.题目
从键盘输入一个字符串,将小写字母全部转换成大写字母,
然后输出到一个磁盘文件"test"中保存。 输入的字符串以!结束。
程序分析
☺还是没有
代码展示
#include <stdio.h>
void main(){
char a='a';
char file_name[20]="E:/file/test.text";
FILE *fp=fopen(file_name,"a");
printf("请输入字符(输入!结束):");
while((a=getchar())!='!'){
if(a<=122&&a>=97){
a-=32;
}
fputc(a,fp);
}
fclose(fp);
printf("存储完毕!");
}
运行结果
3.题目
有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),
输出到一个新文件C中。
程序分析
☺依然没有
代码展示
#include <stdio.h>
void main(){
char f[100];
int i;
FILE *fpA=fopen("D:/file/A.txt","r");
FILE *fpB=fopen("E:/file/B.txt","r");
FILE *fpC=fopen("D:/file/C.txt","a");
if((fpA==NULL)||(fpB==NULL)){
printf("A或B文件未创建!");
}else{
fgets(f,99,fpA);
fclose(fpA);
fputs(f,fpC);
fgets(f,99,fpB);
fclose(fpB);
fputs(f,fpC);
fclose(fpC);
}
printf("ok");
}
运行结果
4.题目
有五个学生,每个学生有3门课的成绩,
从键盘输入以上数据(包括学生号,姓名,三门课成绩),
计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件"stud"中。
程序分析
☺俺要睡觉
代码展示
#include <stdio.h>
typedef struct{
int num;
char name[10];
int cj1;
int cj2;
int cj3;
}stdent;
stdent std[5];
void main(){
int i;
FILE *fpC=fopen("D:/file/C.txt","a");
printf("请输入5个学生的信息:(学生号 姓名 成绩)\n");
for(i=0;i<5;i++){
scanf("%d%s%d%d%d",&std[i].num,std[i].name,&std[i].cj1,&std[i].cj2,&std[i].cj3);
fprintf(fpC,"%d%s%d%d%d",std[i].num,std[i].name,std[i].cj1,std[i].cj2,std[i].cj3);
}
}
运行结果