c语言文件学习の最终季

格式化读写

c语言中最常用的输入输出是printf()函数和scanf()函数但是对于文件操作我们用到fprintf()与fscanf。fprintf和fscanf函数,与printf和scanf函数的作用相似。它们最大的区别就是 读写的对象不同,fprintf和fscanf函数读写的对象不是终端,而是磁盘文件。

fprintf函数

一般形式如下: ch = fprintf( 文件类型指针, 格式字符串, 输出列表);

例如      : 

        fprintf ( fp, "%d",i ); 它的作用是 将整型变量i 的值以 “%d”的格式输出到 fp指向的文件中。

fscanf函数

一般形式如下: fscanf(文件类型指针,格式字符串,输入列表)

例如      : 

fscanf (  fp, "%d", &i ); 它的作用是  读入fp所指向的文件中的i的值。

随机读写 

        在对文件进行操作时,往往不需要从头开始,一般只需对其中指定的内容进行 操作。这时,就需要使用文件定位函数来实现对文件的随机读取。有三种随机读写函数。

fseek函数

fseek 本身 定位位置指针

fseek 函数 int fess(文件类型指针,位移量 ,起始地)

函数功能:移动文件流的读写功能 

起始位置分三种情况:
文件首
SEEK- SET       ==0


文件当前位置
SEEK- CUR      ==1


文件尾
SEEK- END      ==2

例如:
fseek ( fp, -20L, 1); 表示 将位置指针从当前位置向后退20个字节

rewind函数

rewind函数也能起到定位文件指针的作用

int  rewind ( 文件类型指针 )

该函数的作用是使位置指针重新返回文件的开头,该函数没有返回值

ftell函数

ftell函数的一般形式如下:long ftell(文件类型指针)

该函数的作用是读写位置距离文件开始有多少字节。当ftell函数的返回值为-1L时,表示出错。

文件练习

先写入再复制到第三个中并排序。

//int main(){
//		FILE *pa = fopen("./mm.txt","r+");
//		FILE *pb = fopen("./tt.txt","a+");
//		if(pa==NULL){
//		printf("gg");
//		}
//		if(pb==NULL){
//		printf("gg");
//		}
//		char cd[100];
//		fgets(cd,30,pa);
//		fputs(cd,pb);
//		fclose(pa);
//		pb = fopen("./tt.txt","r");
//		FILE *pc = fopen("./nn.txt","w");
//		char cc[100];
//		fgets(cc,20,pb); 
//		
//			int i,j;
//			char t;
//			int len = strlen(cc);
//	for(i=0;i<len-1;i++) {   //最差走.. 
//		for(j=0;j<len-i-1;j++){  //至少走 
//			if(cc[j]>cc[j+1]){	//偌大交换 
//				t = cc[j+1];
//				cc[j+1]=cc[j];
//				cc[j]=t;
//			}
//		}
//	}
//		fputs(cc,pc);
//		printf("成功\n");
//		fclose(pc);
//		fclose(pb);
=
//return 0;	
//}

改表格数据

typedef struct a{
	int id;
	char name[10];
	float money;

}SSS;
	
int main(){
	FILE *pa = fopen("./cctv.txt","r+");
		if(pa==NULL){
			printf("no  g\n");
		} 
	SSS a[4] = {{2208,"zhang",10000},{2107,"lisa",12000},{2109,"wang",13000},{2003,"ming",15000}};
		int i;
		for(i=0;i<4;i++){
			fprintf(pa,"%d	%s	%f\n",a[i].id,a[i].name,a[i].money); 
		}
		rewind(pa);
		SSS b[4];
		for(i=0;i<4;i++){
			fscanf(pa,"%d	%s	%f\n",&a[i].id,&a[i].name,&a[i].money); 
		}
			for(i=0;i<4;i++){
			printf("%d	%s\t%.1f\n",a[i].id,a[i].name,a[i].money); 
		}
		long rr =  ftell(pa); 
		printf("%ld\n",rr);
		fseek(pa,-22,SEEK_END); 
		fputs("llcd",pa);
		fseek(pa,-41,SEEK_END); 
		fputs("15000",pa);
	
	return 0;
}

重定向(输入、输出)

FILE *freopen(要打开的文件名,打开模式(加引号),文件指针标准流、stdin / stdout)

freopen("CON","w",stdout);  关闭输入/输出流。

//	FILE *fp = freopen("stdout.txt","w",stdout); 
//	if(fp ==NULL){
//		printf("G"); 
//	}
//	puts("a");
//	puts("b");
//	puts("c");
//	puts("E");
//	puts("F");
//	fclose(fp);
//	freopen("CON","w",stdout); 
//	puts("1");
//	puts("2");
	
	
	
	FILE *fp = freopen("stdin.txt","r",stdin); 
	if(fp ==NULL){
		printf("G"); 
	}
	char cc[20];
	fgets(cc,10,fp);
	printf("%s",cc);
	printf("1"); 

总结:更绕了 阿西吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值