C语言 文件file

fprintf函数


fprintf是C中的一个格式化库函数,位于头文件中,其作用是格式化输出到一个流文件中;函数原型为int fprintf( FILE *stream, const char *format, [ argument ]…),fprintf()函数根据指定的格式(format),向输出流(stream)写入数据(argument)。针对于文件。

fscanf函数
 

fscanf()函数:

功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。

用 法:int fscanf(FILE *stream, char *format,[argument...]);

int fscanf(文件指针,格式字符串,输入列表);
 

rewind函数

函数名: rewind()
功 能: 将文件内部的位置 指针重新指向一个流( 数据流/文件)的开头
注意:不是 文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而文件指针是指向整个文件,如果不重新赋值文件指针不会改变。
用 法: void rewind(FILE *stream);
头文件:  stdio.h

返回值:无

ftell函数

在c语言中,ftell函数用来返回当前文件指针的位置。定义在stdio.h头文件中。

函数原型:long ftell(FILE *fp)
返回当前文件指针位置。这个位置是当前文件指针相对于文件开头的位移量。

返回值:返回文件指针的位置,若出错则返回-1L

fseek函数

FILE 文件结构中 , 存在一个指针 , 每次调用文件的读写函数 , 该指针就会移动 ;

如 fgets / fputs , getc / putc , fscanf / fprintf , fread / fwrite 等函数 ;

默认情况下 , 指针是从前向后移动的 ;

该文件内部的指针指向的位置可以通过 fseek 函数进行改变 ;


fseek 函数原型如下 : 重新设置文件内部指针的位置 ;

#include <stdio.h>
int fseek(FILE *stream, long offset, int fromwhere);
1
2
设置的指针的位置是 起始位置 + 偏移量 ;

其中的 int fromwhere 参数就是 起始位置 , 有以下三种选择 :

文件头 SEEK_SET 0
当前位置 SEEK_CUR 1
文件尾 SEEK_END 2
long offset 偏移量参数 , 可以为正数 , 也可以为负数 ;

如果执行成功 , 则返回 0 , 失败返回非 0 , 并设置 error 错误代码 
 

typedef struct stu
{
	int id;
	char name[20];
	float score;
	char sex;
}MSG;

int main()
{
	MSG msg[4] = {{1001,"lilei",98,'m'},{1002,"lucy",88,'f'},{1003,"jim",78,'m'},{1004,"john",68,'m'}};
	FILE *fp = fopen("./1.txt","r+");
	if(fp == NULL)
	{
		printf("failed\n");
	}
	int i;
	for(i = 0 ; i < 4 ; i++)
	{
		fprintf(fp,"%d %s %f %c\n ",msg[i].id,msg[i].name,msg[i].score,msg[i].sex);
	}
	rewind(fp);
	MSG r_msg[4];
		for(i = 0 ; i < 4 ; i++)
	{
		fscanf(fp,"%d%s%f%c\n ",&r_msg[i].id,r_msg[i].name,&r_msg[i].score,r_msg[i].sex);
	}
		for(i = 0 ; i < 4 ; i++)
	{
		printf(fp,"%d %s %f %c\n ",r_msg[i].id,r_msg[i].name,r_msg[i].score,r_msg[i].sex);
	}
	long ret = ftell(fp);
	printf("%ld\n",ret);
	
	fseek(fp,5,SEEK_SET);
	fputs("lisi",fp);
	fseek(fp,-4,SEEK_CUR);
	fputs("lilei",fp);
	return 0;
}

重定向

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

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

int main()
{
	FILE *fp = freopen("stdout.txt","w",stdout);
	if(fp == NULL)
	{
		printf("freopen failed\n");
	 } 
	 puts("pride is the devil");
	 puts("no role model");
//	 fclose(stdout);
	 puts("my life");
	 puts("Amari");
	 freopen("CON","w",stdout);
	 puts("middle child");
	 puts("a lot");
	 fclose(fp);
	 return 0;
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值