c对文件的一些基本操作

这几天在做个将学生成绩进行分组,并且使每组的平均分都相近的程序,里面涉及到一些对文件的读,写等基本操作,因此在这做个总结,将这方面的知识巩固一下.

对文件的读取
先定义一个文件指针,然后利用fopen函数将指针指向文件.
关于fopen()函数:
功能:打开一个流
用法:FILE *open(char *filename,char *type);//tpye为打开类型

FIlE *fp;
fp = fopen("average.txt","r");

关于type:
“r” : 只读,如果文件不存在函数将返回一个空指针NULL
“w” : 只写,如果文件不存在将自动创建一个文件,如果存在则会删除原文件再创建一个新文件
“r+”: 既可读又可写
“w+”: 既可读又可写
“a” : 向文本末添加数据
“a+”: 既可读又可再文本末添加数据
“rb”: 只读方式打开一个2进制文件
“wb”: 只写方式打开一个2进制文件
“rb+”: 既可读又可写打开一个2进制文件
“wb+”: 既可读又可写打开一个2进制文件
“ab”: 向2进制文件末添加数据
“ab+”: 可读又可向2进制文件添加数据

关闭文件
通常我们打开了一个文件再用完后都需要关闭,此时用库函数fclose()
关于fclose():
功能:关闭一个流
用法:int fclose(FIILE *stream);

FIlE *fp;
fp = fopen("average.txt","r");
fclose(fp);

读取文件内容
用库函数fgets()
关于fgets():
功能:从流中读取一字符串
用法:char *fgets(char *string,int n,FILE *stream);//读取n-1个字符到string中
说明:当n小于或者等于一行的字符串长度时,读取长度为n-1结束,当n-1大于字符串长度时读取到’\n’或者EOF结束,每次读取完指针都会自动加1,指向下一个位置.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	FILE *fp;
	fp = fopen("f.txt","r");
	char str[100];
	char str2[100];
	fgets(str,5,fp);//字符串长度大于n 
	fgets(str2,500,fp);//字符串长度小于n 
	printf("str=%s,len=%d\n",str,strlen(str));
	printf("str2=%s,len=%d\n",str2,strlen(str2));//因为指针先读取了长度为4的字符串存放再str中,此时再读取字符串时将从第5个字符(起始长度为1不是0)开始 ,遇到'\n'或者EOF结束
	fclose(fp);
} 

文件f:
在这里插入图片描述

运行结果:
在这里插入图片描述
通过fgets函数得到文件所有行的内容:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	FILE *fp;
	fp = fopen("f.txt","r");
	char str[200];
	char contents[4][200];
	int j=0;
	while(fgets(str,200,fp) != NULL)
	{
		if(strlen(str) == 1)//去除空行
		continue;
		for(int i=0; i<strlen(str); i++)
		{
			contents[j][i] = str[i];
		 }
		 j++;
	}
	for(int i=0; i<j; i++)
	printf("第%d行:%s",i+1,contents[i]);
	fclose(fp);
} 

运行结果:
在这里插入图片描述
向文件写入数据
用库函数fprintf()
关于fprintf():
功能:传送格式化输入到一个流中
用法:int printf(FILE *stream,char *format[, arguement,…]);与printf类似

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	FILE *fp;
	fp = fopen("f.txt","w");
	const char *s = "do you know?\nYes";
	fprintf(fp,"%s",s);
	fclose(fp);
} 

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值