2021-08-24 自学C语言《跨平台的C语言程序设计》(上海工程技术大学SUES校本) 第十二章 文件 总结+课后练习

头文件解释

stdlib 头文件即standard library标准库头文件。stdlib.h里面定义了五种类型、一些宏和通用工具函数。standard library标准库头文件的类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t; 宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等; 常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 具体的内容可以打开编译器的include目录里面的stdlib.h头文件查看。

Cannot open file strike any key exit!翻译:不能打开文件任何窗口。

Return和exit(0),exit(1)的区别

exit(0):正常运行程序并退出程序;

exit(1):非正常运行导致退出程序;

return():返回函数,若在主函数中,则会退出函数并返回一值。

详细说:

  1. return返回函数值,是关键字;  exit 是一个函数。

  2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
  3. return是函数的退出(返回);exit是进程的退出。

  4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。

  5. return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出,非0 为非正常退出。

  6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。

C语言检索文件只能在当前文件夹进行检索

1和l不混淆;两个等于号之间不能有空格

12.1.4 文件的打开与关闭

Fopen函数用来打开一个文件,其调用的一般形式为:

文件指针名=fopen(文件名,使用文件方式);

其中,“文件指针名”必须是被说名为FILE类型的指针变量;“文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。

“文件名”是字符串常量或字符串数组。

例如:FILE *fp;

fp=fopen("file_project","r");

其意义是在当前目录下打开文件file_project,只允许进行“读”的操作,并使fp指向该文件。

又如:

FILE *fp

fp=fopen("c:\\file_project","rb");

其意义是打开C驱动器磁盘的根目录下的文件file_project,这是一个二进制文件,只允许按二进制的方式进行读操作。两个反斜线“\\”中的第一个表示转义字符,第二个表示根目录。

使用文件内的方式共有12种,见表12.1

文件使用方式              意义

"rt"       只读打开一个文本文件,只允许读取数据

"wt"       只写打开或建立一个文本文件,只允许写数据

"at"       追加打开一个文本文件,并在文件末尾写数据

"rb"       只读打开二进制文件,只允许读取数据

"wb"       只写打开或建立一个二进制文件,只允许读取数据
"ab"       追加打开一个二进制文件,并在文件末尾写数据

"rt++"     读写打开一个二进制文件,并在文件末尾写数据

"wt++"     读写打开或建立一个文本文件,允许读写

"at++"     读写打开一个文本文件,允许读,或在文件末尾追加数据

"rb++"     读写打开一个二进制文件,允许读和写
"wb++"     读写打开或建立一个二进制文件,允许读写

"ab++"     读写打开一个二进制文件,允许读,或在文件末尾追加数据

一些英语单词和注释

read 读

write 写

append 追加

text 文本文件,可省略不写

binary 二进制文件

+:读和写

if((fp=fopen("c:\\file_project","rb"))==NULL))

{printf("eroe on open c:\\file_project!");

getch();

exit(1);

2.文件关闭函数(fclose函数)

文件一旦使用完毕,需要采用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。

fclose函数调用的一般形式是:

fclose(文件指针);

例如:

fclose(fp);

正常完成关闭文件操作时,fclose函数的返回值为0.如返回非零值则表示有错误发生。

12.2.1程序解析——读取工程文件

(1)字符读写函数:fgetc和fputc.

(2)字符串读写函数:fgets和fputs.

(3)数据块读写函数:freed和fwrite.

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

使用以上函数都要求包括头文件stdio.h

FILE *fp;//文件指针   很关键  没有定义文件指针读不出程序

小科普:二进制文件
包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件。

第一讲(字符读写函数)

读字符函数:fgetc()

字符变量=fgetc(文件指针);

eg.ch=fgetc(fp);

1.必须是以读或读写的方式打开

2.读取的字符结果也可以不向字符变量赋值

e.g.fgetc(fp);

3.文件内部有位置指针,用来指向文件的当前读写字节。文件打开时,该指针总是指向文件的第一个字节。使用fgetc函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。

写字符函数:fputc()

功能:把一个字符写入指定的文件中,调用的形式为

fputc(字符量,文件指针);

其中,待写入的字符量可以是字符常量或变量,例如:

fputc('a',fp);

其意义是把字符a写入fp所指向的文件中。

1.被写入的文件可以用写,读写,追加方式打开,写或读写方式打开一个已经存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。

2.每写入一个字符,文件内部位置指针向后移动一个字节。

3.fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF,可用此来判断写入是否成功

第二讲(字符串读写函数)

字符串读写函数fgets(从指定的文件中读一个字符串到字符数组中)

调用形式:fgets(字符数组名,n,文件指针);

N为整数,不超过n-1个字符,在读入最后一个字符后加上串结束标志‘\0‘。

例12.5

字符串读写函数fputs(向指定的文件写入一个字符串)

调用形式:fputs(字符串,文件指针);

可以是字符串常量,也可以是字符数组名或指针变量。

例. fputs("abcd",fp);

其意义是把字符串"abcd"写人fp所指的文件之中。

例12.6

第三讲(数据块读写函数)

数据块读函数fread

读数据块函数调用的一般形式为∶ fread(buffer,size,count,fp)

fread()——从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size* count个字节

数据块写函数fwrite

写数据块函数调用的一般形式为∶ fwrite(buffer,size,count,fp)

fwrite()——从buffer开始,—次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动 size* count个字节

例12.7

第四讲(格式化读写函数)

格式化读写函数fscanf和fprintf

fscanf函数、fprint函数与前面使用的scanf和printf函数的功能相似,都是格式化读写函数。两者的区别在于fscanf函数和fprint函数的读写对象不是键盘和显示器,而是磁盘文件

这两个函数的调用格式为∶

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

例12.8

读 / 写函数的选用原则

读/写1个字符(或字节)数据时∶选用fgetc()和iputc()函数

读/写1个字符串时∶选用fgets()和fputs()函数读/写1个(或多个)不含格式的数据时∶选用fread()和fwrite()函数

读/写1个(或多个)含格式的数据时∶选用 fscanf()和fprintf()函数

12.3文件的随机读写

改变文件位置指针函数fseek()

fseek函数的调用形式∶ fseekfp,offset,position);其中∶fp为文件型指针;position为起始点,指出以文件的什么位置为基准进行移动

例12.9

位置指针重返文件头函数rewind()

rewind函数的调用形式∶ rewind(fp);

其中∶ fp为文件型指针

rewind函数的功能是∶使fp指定的文件的位置指针重新定位到文件的开始位置

例12.10

3.位置指针当前值函数ftell()

例12.11

4.文件的随机读写

在学生文件stu list中读出第二个学生的数据

FILE *fp;

int i=1; s1=&stu;

iffp=fopen("stu_list","rb"))==NULL){

printf("Cannot open file !"); exit(1);} rewind(fp);

fseek(fp,i*sizeof((struct stu)),0); fread(s1,sizeof(struct stu),1,fp); printf("name\tnumber age addr\n");

printf("%s\t%5dt%5dt%sn",s1->name,s1->num,s1->age,s1->addr);

例12.12

12.4文件检测函数

C语言中常用的文件检测函数有以下几个。

12.4.1文件结束检测函数feof函数

feof函数调用格式:

feof(文件指针);

功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。

一般是读写

12.4.2读写文件出错检测函数ferror函数

ferror函数调用格式:

ferror(文件指针);

功能:检查文件在用各种输人输出丽数进行读写时是否出错。如ferror返回值为0表

示未出错,否则表示有错。

12.4.3文件出错标志和文件结束标志置0函数clearerr函数

clearerr函数调用格式:

clearerr(文件指针);

功能:本函数用于清楚标志和文件结束标志。使它们为0值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值