C语言文件操作--文本文件详解(附代码)

C语言文件操作

前言

什么是文本文件???
我们在刚刚接触c语言时就了解了ASCII标,每个特定的数代表一个字符,那么将字符形式的文件就是ASCII文件,也称为文本文件,每个字节存放一个字符的ASCII值。

1. 打开文本文件

注意:应提前建立一个.text文本文件,放到与.c文件同一个文件夹中
fopen 打开文件函数 (成功打开后指向该流的文件指针就会被返回,失败返回NULL)
fclose 关闭文件函数
打开文件方式:
在这里插入图片描述
代码示例:

#include <stdio.h>
#include <stdlib.h>

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;
}


2. 判断是否读取到文件末尾

  1. feof()函数检查文件是否读取完毕,没到最尾部返回0,到最尾部返回非零值。
  2. fgetc()可从文件数据流中一次读取一个字符,然后读取光标移动到下一个字符,并逐步将文件的内容读出。如果字符读取成功,则返回所读取的字符,否则返回EOF(end of file)。

代码块1:

#include <stdio.h>
#include <stdlib.h>

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 <stdio.h>
#include <stdlib.h>

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. 顺序读写数据文件

3.1读写字符函数

函数调用方式
fgetc()fegrtc(文件指针)
fputc()fputc(ch,fp)

//把字符变量ch写到fp所指向的文件中去
代码示例:

#include <stdio.h>
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
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()函数更简洁,容易记忆。

4. 用格式化的方式读写文本文件

引子:在以前的输出输入之中,常用scanf和printf函数,格式化读写函数和他们类似,而不同点就是,scan()f函数接收的是来自键盘的信息,fscanf()函数接收的是文件中的内容;printf()函数是将内容打印在显示屏上,fprintf()函数是将内容打印到文件中。

函数调用方式
fscanf()fscanf(文件指针,格式字符串,输入列表)
fprintf()fprintf(文件指针,格式字符串,输出列表)

实例讲解:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
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()函数结合使用能够完成大多数任务。
有趣
以上是小编将自己对文件操作中的对文本文件操作的理解,分析,看法融入其中,如有发现问题,请在评论区留下你宝贵的意见。

  • 12
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandela688

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值