零基础入门学习C语言012讲:文件操作(2)

上一节的课后作业:

作业: 写一个load()函数将该文件读取并显示出来! 聪明如你,认真思考一定能做到的! 

#include <stdio.h>

#define SIZE 4

struct student
{
	char name[10];
	int num;
	int age;
	char addr[15];
}stu[SIZE];

void load();

void main()
{
	int i;

	load();
	printf("      name   num   age     address\n\n");
	for (i = 0; i < SIZE; i++)
	{
		printf("%10s %5d %5d %10s\n", stu[i].name, stu[i].num, stu[i].age, stu[i].addr);
	}
}

// 作业: 写一个load()函数将该文件读取并显示出来! 聪明如你,认真思考一定能做到的! 
void load()
{
	FILE *fp;
	int i;

	if (!(fp = fopen("student-list", "r")))
	{
		printf("Cannot open the file!\n");
		return;
	}

	for (i = 0; i < SIZE; i++)
	{
		fread(&stu[i], sizeof(struct student), 1, fp);
	}
	fclose(fp);
}

三.格式化读写函数(fprintf()和fscanf())

函数调用:

fprintf ( 文件指针,格式字符串,输出表列);

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

函数功能:

从磁盘文件中按格式读入或输出字符。

例如:

fprintf(fp, "%d,%6.2f", i, t);

fscanf (fp, "%d,%f", &i, &t);

顺序读写和随机读写

顺序读写:

位置指针按字节位置顺序移动。

 

随机读写:

读写完上一个字符(字节)后,并不一定要

读写其后续的字符(字节),而可以读些文

件中任意位置上所需要的字符(字节)。

fseek函数(一般用于二进制文件)

函数功能:

改变文件的位置指针

函数调用形式:

fseek(文件类型指针,位移量,起始点)

起始点:

文件开头           SEEK_SET      0

文件当前位置     SEEK_CUR     1

文件末尾           SEEK_END     2

位移量:以起始点为基点,向前移动的字节数。

fseek函数应用举例

fseek(fp,100L,0);

将位置指针移到离文件头100个字节处

fseek(fp,50L, 1);

将位置指针移到离当前位置50个字节处

fseek(fp,50L, 2);

将位置指针从文件末尾处向后退10个字节

fseek(fp,i*sizeof(struct stu),0);

将位置指针移到离文件头i*sizeof(struct stu)这个距离处。

举例论证

例子:

在学生文件student-list中读出第二个学生的数据。

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

struct student
{
	char name[10];
	int num;
	int age;
	char addr[15];
}boy;

void main()
{
	FILE *fp;

	int i = 1;      // 用于定位第 i 个结构

	if (!(fp = fopen("student-list", "r")))
	{
		printf("Cannot open the file!\n");
		return;
	}

	rewind(fp);  //重置文件头
	fseek(fp, i*sizeof(struct student), 0);  //定位要读取的位置
	fread(&boy, sizeof(struct student), 1, fp);  //读取

	printf("name\tnumber      age     addr\n");
	printf("%s\t%5d  %7d      %s\n", boy.name, boy.num, boy.age, boy.addr);

	system("pause");
}

ftell函数

函数作用:

得到流式文件中的当前位置,用相对于文件开

头的位移量来表示。

返回值:

返回当前位置,出错时返回-1L。

应用举例:

i = ftell(fp);

if(i == -1L)  printf(“error\n”);

出错的检测

ferror函数

调用形式:

ferror(fp);

返回值:

返回0,表示未出错;返回非0,表示出错。

注意:

在调用一个输入输出函数后立即检查ferror函

数的值,否则信息会丢失。在执行fopen函数

时,ferror函数的初始值自动置为0。

clearerr函数

调用形式:

clearerr(fp);

函数作用:

使文件错误标志和文件结束标志置为0。

只要出现错误标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入输出函数。

文件操作小结

分类

函数名

功能

打开文件

fopen()

打开文件

关闭文件

fclose()

关闭文件

文件定位

fseek()

改变文件位置指针的位置

 

rewind()

使文件位置指针重新至于文件开头

 

 ftell()

返回文件位置指针的当前值

文件状态

feof()

若到文件末尾,函数值为真

 

ferror()

若对文件操作出错,函数值为真

 

clearerr()

使ferror和feof()函数值置零

文件读写

fgetc(),getc()

指定文件取得一个字符         

 

fputc(),putc()

字符输出到指定文件

 

fgets()

指定文件读取字符串

 

fputs()

字符串输出到指定文件

 

getw()

指定文件读取一个字(int型)

 

putw()

一个字输出到指定文件

 

fread()

指定文件中读取数据项

 

fwrite()

数据项写到指定文件中

 

fscanf()

指定文件按格式输入数据

 

fprintf()

指定格式将数据写到指定文件中

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值