什么是文本文件???
我们在刚刚接触c语言时就了解了ASCII标,每个特定的数代表一个字符,那么将字符形式的文件就是ASCII文件,也称为文本文件,每个字节存放一个字符的ASCII值。
注意:应提前建立一个.text文本文件,放到与.c文件同一个文件夹中
fopen 打开文件函数 (成功打开后指向该流的文件指针就会被返回,失败返回NULL)
fclose 关闭文件函数
打开文件方式:
代码示例:
#include
#include
int main()
{
char ch;
FILE *fp; //声明文件指针
fp=fopen("a.txt","r"); //以只读方式打开文本文件
if(fp==NULL)
{
printf("Fail to open the file!");
exit(0);
}
else
{
printf("The file is open!\n");
}
fclose(fp); //关闭文件
return 0;
}
代码块1:
#include
#include
int main()
{
char ch;
FILE *fp; //声明文件
fp=fopen("a.txt","r"); //以只读方式打开文件
if(fp==NULL)
{
printf("Fail to open the file!");
exit(0);
}
while(!feof(fp)) //判断是否到文件结尾
{
ch=fgetc(fp); //依次读取文本中一个个字符
printf("%c",ch);//可在显示屏上依次打印文件中字符
}
fclose(fp);
return 0;
}
代码块2:
#include
#include
int main()
{
char ch;
FILE *fp; //声明文件
fp=fopen("a.txt", " r " ); //打开文件
if(fp==NULL)
{
printf("Fail to open the file!");
exit(0);
}
while( ( ch=fgetc(fp) ) != EOF ) //判断是否到文件结尾
{
printf("%c",ch);//可在显示屏上依次打印文件中字符
}
fclose(fp); //关闭文件
return 0;
}
小结:代码1与代码2相比代码2看起来更简洁,未使用feof()函数
3.1读写字符函数
函数 | 调用方式 |
---|---|
fgetc() | fegrtc(文件指针) |
fputc() | fputc(ch,fp) |
//把字符变量ch写到fp所指向的文件中去
代码示例:
#include
int main()
{
FILE*fp; //设置一个文件指针
char ch; //定义一个待用字符变量
if((fp=fopen("test.txt","w"))==NULL) //以只写方式打开文件
{
printf("ERROR");
exit(0); //关闭所有文件,终止正在执行的程序
}
scanf("%c",&ch);
while(ch!="\n")
{
fputc(ch,fp); //将字符ch写入fp所指向的文件
scanf("%c",&ch);
}
fclose(fp); //关闭文件
}
值得注意的是当输入字符后,文本中原先内容被清空
如何在原先内容上续写呢?
if((fp=fopen("test.txt","a"))==NULL) // 只需将w改为a即可
如此就能解决问题。
因此,对文件进行操作时,一定要选择适宜的文件打开方式!!!
3.2字符串
函数 | 调用方式 | 功能 | 返回值 |
---|---|---|---|
fgets() | fgets(str,n,fp) | 从fp指向的文件读入一个长度为n-1的字符串,存放到字符数组str中去 | 成功返回地址str,失败返回NULL |
fputs() | fputs(str,fp)) | 把str所指向的字符串写入fp所指向的文件中 | 成功返回0,失败返回非零 |
运用fgets()函数代码块:
#include
#include
#include
int main()
{
char str[10];//定义一个字符数组用于储存文本文件中字符串
FILE *fp; //声明文件
fp=fopen("a.txt","r"); //以只读方式打开文件
if(fp==NULL)
{
printf("Fail to open the file!");
exit(0);
}
else
{
printf("The file is open!\nPlease proceed to the next step\n");
}
fgets(str,5,fp); //从文件中取出4个字符
puts(str); //将文件内容打印到显示屏上
fclose(fp);
return 0;
}
运用fputs()函数代码块:
#include
#include
#include
int main()
{
char str[10];
FILE *fp; //声明文件
fp=fopen("a.txt","a"); //以追加方式打开文件
if(fp==NULL)
{
printf("Fail to open the file!");
exit(0);
}
else
{
printf("The file is open!\nPlease proceed to the next step\n");
}
printf("please input content:\n");
gets(str);
fputs(str,fp);
fclose(fp);
return 0;
}
小结:相比之前的读取,fgets()函数不够灵活,受到一开始“n”的限制;而录入,fputs()函数更简洁,容易记忆。
引子:在以前的输出输入之中,常用scanf和printf函数,格式化读写函数和他们类似,而不同点就是,scan()f函数接收的是来自键盘的信息,fscanf()函数接收的是文件中的内容;printf()函数是将内容打印在显示屏上,fprintf()函数是将内容打印到文件中。
函数 | 调用方式 |
---|---|
fscanf() | fscanf(文件指针,格式字符串,输入列表) |
fprintf() | fprintf(文件指针,格式字符串,输出列表) |
实例讲解:
#include
#include
#include
int main()
{
char str1[20],str2[20];
FILE*fp;
if((fp=fopen("text.txt","r+"))==NULL) //以读写的方式打开test
{
printf("ERROR");
exit(0);
}
printf("在显示屏上打印文件中的内容:\n");
fscanf(fp,"%s",str1);
puts(str1);//向显示屏打印 从文件接受的字符串
printf("\n请输入要写到文件的内容:\n");
gets(str2); //输入
fprintf(fp,"%s",str2);
fclose(fp); //关闭文件
}
小结:由代码实例讲解可知,fprintf()函数和fputs()函数效果一样;
而fscanf()函数被输入列表str定义时【】中的数值所限制。
总结·:由以上众多代码示例可以发现,fgetc()函数和fprintf()函数,fputs()函数结合使用能够完成大多数任务。
以上是小编将自己对文件操作中的对文本文件操作的理解,分析,看法融入其中,如有发现问题,请在评论区留下你宝贵的意见。