C语言第十一章:文件

来源:互联网 发布:知乎 万历郑贵妃 编辑:程序博客网 时间:2024/05/18 00:59

1、文件的分类:
1) 从用户的角度看,文件可分为普通文件和设备文件两种。
2)从文件编码的方式来看,文件可分为ASCII码文件(文本文件)和二进制码文件(也叫流式文件)种。

1、对文件的操作步骤
1)引入头文件(stdio.h )
2)定义文件指针
3)打开文件
fopen函数用来打开一个文件,其调用的一般形式为:
文件指针变量名 = fopen( 文件名, 使用文件方式 );
其中:
“文件指针名”必须是被说明为FILE 类型的指针变量;
“文件名”是被打开文件的文件名;
“使用文件方式”是指文件的类型和操作要求;
“文件名”是字符串常量或字符串数组。

4)文件读写
读数据块函数调用的一般形式为:
fread(buffer,size,count,fp);
写数据块函数调用的一般形式为:
fwrite(buffer,size,count,fp);
其中:
buffer:是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示
存放输出数据的首地址。
size:表示数据块的字节数。
count:表示要读写的数据块块数。
fp:表示文件指针。
5)关闭文件

在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。
fscanf(文件指针,格式字符串,输入表列);
fprintf(文件指针,格式字符串,输出表列);

移动文件内部位置指针的函数主要有两个,即
rewind():它的功能是把文件内部的位置指针移到文件首。
fseek():fseek函数用来移动文件内部位置指针,
“文件指针”指向被移动的文件。
“位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出
错。当用常量表示位移量时,要求加后缀“L”。
“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
注意:还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。

1、文件结束检测函数feof函数
调用格式:feof(文件指针);
读写文件出错检测函数
2、ferror函数调用格式:ferror(文件指针);
功能:检查文件在用各种输入输出函数进行读写时是否出错。如ferror返回值为0表示未出错,否则表示有错。

3、文件出错标志和文件结束标志置0函数
clearerr函数调用格式:clearerr(文件指针);
功能:本函数用于清除出错标志和文件结束标志,使它们为0值。

最后重要的疑惑点
其它考试重点
文件的复习方法:
把上课时候讲的文件这一章的题目要做一遍,一定要做,基本上考试的都会在练习当中。
1)字符串的 strlen() 和 strcat() 和strcmp() 和strcpy()的使用方法一定要记住。他们的参数都是地址。其中strcat() 和strcmp()有两个参数。

2)strlen 和 sizeof的区别也是考试的重点;

3)define f(x)(x*x) 和 define f(x) x*x 之间的差别。一定要好好的注意这写容易错的地方,替换的时候有括号和没有括号是很大的区别。

4)int *p;
p = (int *)malloc(4);
p = (int *)malloc(sizeof(int));以上两个等价
当心填空题目,malloc的返回类型是 void *

6)函数的递归调用一定要记得有结束的条件,并且要会算简单的递归题目。要会作递归的题目

7)结构体和共用体以及链表要掌握最简单的。typedef考的很多,而且一定要知道如何引用结构体中的各个变量,链表中如何填加和删除节点,以及何如构成一个简单的链表,一定记住链表中的节点是有两个域,一个放数值,一个放指针。

8)函数指针的用法(*f)()记住一个例子:
      int add(int x, int y)
{….}
main()
{ int (*f)();
f=add;
}
赋值之后:合法的调用形式为1、add(2,3);
2、f(2,3);
3、(*f)(2,3)
9)两种重要的数组长度:
char a[]={‘a’,’b’,’c’};  数组长度为3,字符串长度不定。sizeof(a)为3。
char a[5]={ ‘a’,’b’,’c’}  数组长度为5,字符串长度3。sizeof(a)为5。
10)scanf 和 gets的数据:
如果输入的是 good good study!
那么scanf(“%s”,a); 只会接收 good. 考点:不可以接收空格。
gets(a); 会接收 good good study! 考点:可以接收空格。
11)共用体的考查:
union TT
{ int a;
char ch[2];}
考点一: sizeof (struct TT) = 6;
12)“文件包含”的考查点:
    no1.c no2.c

这里一个C语言程序是有两个文件组成,分别是no1.c, no2.c。那么no1.c中最开始有个#include”no2.c”他表示把第二个文件的内容给包含过来,那么no1.c中调用add()函数的时候就可以了把数值传到no2.c中的被调用函数add()了。
一个文件必须要有main函数。 这句话错了。 例如:no2.c就没有。
头文件一定是以.h结束的。 这句话错了。例如:no1.c中就是#include”no2.c”以.c结尾的。
13)指针迷惑的考点:
char ch[]=”iamhandsome”;
char *p=ch;
问你 *(p+2) 和 *p+2的结果是多少?
‘m’ ‘k’ 结果是这两个,想不通的同学请作死的想!想通为止!
14)数组中放数组一定要看懂:
int a[8]={1,2,3,4,4,3,2,2};
int b[5]={0};
b[a[3]]++ 这个写法要看懂,结果要知道是什么?b[4]++,本身是0,运行完后,b[4]为1了。
15)字符串的赋值
C语言中没有字符串变量,所以用数组和指针存放字符串:
1、char ch[10]={“abcdefgh”}; 对
2、char ch[10]=“abcdefgh”; 对
3、char ch[10]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’}; 对
4、char *p=“abcdefgh”; 对
5、char *p; 对
p=“abcdefgh”;
6、char ch[10]; 错了!数组名不可以赋值!
ch=“abcdefgh”;
7、char *p={“abcdefgh”}; 错了!不能够出现大括号!
16)字符串赋值的函数背诵:一定要背诵,当心笔试填空题目。
把s指针中的字符串复制到t指针中的方法
1、while( (*t=*s)!=null ){s++;t++;} 完整版本
2、while( *t=*s ){s++;t++;} 简单版本
3、while( *t++=*s++); 高级版本
17)typedef 是取别名,不会产生新的类型,他同时也是关键字
考点一:typedef int qq 那么 int x 就可以写成 qq x
考点二:typedef int *qq 那么 int *x就可以写成 qq x
18)static
static int x;默认值为0。
int x:默认值为不定值。

0 0