C语言中操作文件-向文件写入字符-学习笔记-61

引入

前面,我们学会了如何打开一个文件,并创建一个指针指向该文件。打开之后,我们就要对文件进行读写了。

向文件读写字符

对文件进行读写一个字符,需要下面这两个函数

函数名 调用形式 功能 返回值
fgetc fgetc(fp) 从 fp 指向的文件读入一个字符 读入成功,返回所读的字符 读入失败,返回-1
fputc fputc(fp) 把字符 ch 写到文件指针变量 fp 指向的文件 输出成功,返回输出的字符 输出失败,返回-1

fgetc 中

  • f: 表示 file 即文件
  • get:表示 获取
  • c:表示 character
  • fputc 同理

例子引入

从键盘逐个输入字符串,然后用 fputc 函数写到磁盘文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include<stdlib.h>
int main(){
FILE *fp;
char ch,filename[20]; //一个存文字,一个存文件目的
printf("请输入文件位置:\n");
scanf("%s",filename); //输入文件名
if((fp=fopen(filename,'w'))==NULL){
// 如果获取不到指针,就证明打开文件失败
printf("错误!文件无法读入!");
exit(0); //结束该程序
}
ch=getchar(); //因为上面输入文件名的时候,输入了一个回车,先存在这里,否则会输入到磁盘里
printf("请输入一个准备存储到磁盘的字符串(#号结尾):\n");
ch=getchar(); //覆盖上面的回车,获取输入的第一个字符
while(ch!='#'){
//如果第一个字符不是 # 号,就开始循环
fputc(ch,fp); //因为上面已经输入了一个了,所以先存储
putchar(ch); //然后把输入的内容输出到终端
ch=getchar(); //再从键盘获取新的输入的内容
}
fclose(fp); //用完文件一定要关闭文件,否则写入会失败
return 0;
}

解释

  • 我们使用 fopen 打开文件的时候,文件名可以是变量或者字符串常量或者字符数组的首地址,因为文件使用方式是 w ,所以,如果没有该文件,则会新建。
  • 因为 fopen 的打开方式是 w ,所以文件只能写入,不能读取。fopen 成功后,会返回该文件信息区的起始地址。如果不能打开,那就返回文件不能打开,然后使用了exit(0)终止程序运行。
  • exit 是标准 C 的库函数,表示终止程序,在 stdlib.h 中包含
  • 执行过程是,我们先从键盘获取一个字符,如果不是 # 号则进入 while 循环体,并首先存储这个字符。再获取下一个。
  • 最后别忘了用 fclose 关闭文件,否则无法保存。

例子强化

在上面例题的基础上,我们要求从上面写入的文件读取里面的内容,在同一目录下复制一个新的文件,也包含我们输入的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *in,*out;
char ch,inname[20],outname[20];
printf("请输被复制的文件名:\n");
scanf("%s",inname);
printf("请输入新的文件名:\n");
scanf("%s",outname);
if((in=fopen(inname,"r"))==NULL){
printf("文件无法写入1!\n");
exit(0);
}
if((out=fopen(outname,"w"))==NULL){
printf("文件无法写入2!\n");
exit(0);
}
//开始复制
while(!feof(in)){
ch=fgetc(in);
fputc(ch,out);
}
fclose(in);
fclose(out);
return 0;
}

解释

  • 我们注意到最关键的读取 fgetc ,我们并没有改变函数,只是一遍一遍的调用,一遍一遍的调用即可自动将读写位置后移。
  • 为了知道我们的文件是否都读入了,使用 feof 函数就可以检查,如果已经结束了,就是1真,否则是0假,所以 !feof(in) 为真。
  • 我们在程序后方,通过循环将file1的内容逐字赋值给 file2,这样 file2 的内容和 file1的内容就完全相同了。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!