c语言入门:C语言入门之文件(2-1)



fprf(fp,\"%s %d %d %s\\n\",pp->name,pp->num,pp->age,pp->
addr);
rewind(fp);
for(i=0;i<2;i ,qq )
fscanf(fp,\"%s %d %d %s\\n\",qq->name,&qq->num,&qq->age,qq->addr);
prf(\"\\n\\nname\\tnumber age addr\\n\");
qq=boyb;
for(i=0;i<2;i ,qq )
prf(\"%s\\t] } %s\\n\",qq->name,qq->num, qq->age,
qq->addr);
fclose(fp);
}

   和例10.6相比中fscanf和fprf每次只能读写个结构元素因此采用了循环语句来读写全部元素 还要注意指针变量pp,qq由于循环改变了它们因此在25和32行分别对它们重新赋予了首地址












   文件随机读写

   前面介绍对文件读写方式都是顺序读写 即读写文件只能从头开始顺序读写各个数据 但在实际问题中常要求只读写文件中某指定部分 为了解决这个问题可移动文件内部位置指针到需要读写位置再进行读写这种读写称为随机读写 实现随机读写关键是要按要求移动位置指针这称为文件定位文件定位移动文件内部位置指针主要有两个 即 rewind 和fseek

   rewind前面已多次使用过形式为: rewind(文件指针); 它功能是把文件内部位置指针移到文件首 下面主要介绍
fseek

   fseek用来移动文件内部位置指针形式为: fseek(文件指针位移量起始点); 其中:“文件指针”指向被移动文件 “位移量”表示移动字节数要求位移量是long型数据以便在文件长度大于64KB 时不会出错当用常量表示位移量时要求加后缀“L”“起始点”表示从何处开始计算位移量规定起始点有 3种:文件首当前位置和文件尾

   其表示思路方法如表10.2

起始点    表示符号    数字表示
──────────────────────────
文件首    SEEK—SET    0
当前位置   SEEK—CUR    1
文件末尾   SEEK—END     2

   例如:

   fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处还要介绍说明是fseek般用于 2进制文件在文本文件中由于要进行转换故往往计算位置会出现文件随机读写在移动位置指针的后 即可用前面介绍种读写进行读写由于般是读写个数据据块因此常用fread和fwrite下面用例题来介绍说明文件随机读写

   [例10.8]在学生文件stu list中读出第 2个学生数据

#<stdio.h>
struct stu
{
  char name[10];
  num;
  age;
  char addr[15];
}boy,*qq;

{
  FILE *fp;
  char ch;
  i=1;
  qq=&boy;
  ((fp=fopen(\"stu_list\",\"rb\"))NULL)
  {
   prf(\"Cannot open file strike any key exit!\");
   getch;
   exit(1);
  }
  rewind(fp);
  fseek(fp,i*(struct stu),0);
  fread(qq,(struct stu),1,fp);
  prf(\"\\n\\nname\\tnumber age addr\\n\");
  prf(\"%s\\t] } %s\\n\",qq->name,qq->num,qq->age,
  qq->addr);
}

   文件stu_list已由例10.6建立用随机读出思路方法读出第 2个学生数据中定义boy为stu类型变量qq为指向boy指针以读 2进制文件方式打开文件第22行移动文件位置指针其中i值为1表示从文件头开始移动个stu类型长度 然后再读出数据即为第 2个学生数据

   文件检测

   C语言中常用文件检测有以下几个

   、文件结束检测feof格式: feof(文件指针);

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

   2、读写文件出错检测ferror格式: ferror(文件指针);

   功能:检查文件在用各种输入输出进行读写时是否出错 如ferror返回值为0表示未出错否则表示有错

   3、文件出错标志和文件结束标志置0clearerr格式: clearerr(文件指针);

   功能:本用于清除出错标志和文件结束标志使它们为0值

   C库文件

   C系统提供了丰富系统文件称为库文件C库文件分为两类类是扩展名为\".h\"文件称为头文件 在前面包含命令中我们已多次使用过在\".h\"文件中包含了常量定义、 类型定义、宏定义、原型以及各种编译选择设置等信息类是包括了各种目标代码供用户在 通常在个库要在的前包含该原型所在\".h\" 文件

   在附录中给出了全部库

ALLOC.H    介绍说明内存管理(分配、释放等)
ASSERT.H    定义 assert调试宏
BIOS.H     介绍说明IBM—PC ROM BIOS子各个
CONIO.H    介绍说明DOS控制台I/O子各个
CTYPE.H    包含有关分类及转换名类信息(如 isalpha和toascii等)
DIR.H     包含有关目录和路径结构、宏定义和
DOS.H     定义和介绍说明MSDOS和8086些常量和
ERRON.H    定义代码助记符
FCNTL.H    定义在和open库子连接时符号常量
FLOAT.H    包含有关浮点运算些参数和
GRAPHICS.H   介绍说明有关图形功能各个图形代码常量定义正对区别驱动各种颜色值用到些特殊结构
IO.H      包含低级I/O子结构和介绍说明
LIMIT.H    包含各环境参数、编译时间限制、数范围等信息
MATH.H     介绍说明数学运算还定了 HUGE VAL 宏 介绍说明了matherr和matherr子用到特殊结构


MEM.H     介绍说明些内存操作(其中大多数也在STRING.H 中介绍说明)
PROCESS.H   介绍说明进程管理各个spawn…和EXEC …结构介绍说明
SETJMP.H    定义longjmp和jmp用到jmp buf类型 介绍说明这两个
SHARE.H    定义文件共享参数
SIGNAL.H    定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量介绍说明rajse和signal两个
STDARG.H    定义读参数表(如vprf,vscarf)
STDDEF.H    定义些公共数据类型和宏
STDIO.H    定义Kernighan和Ritchie在Unix V 中定义标准和扩展类型和宏还定义标准I/O 预定义流:stdin,stdout和stderr介绍说明 I/O流子
STDLIB.H    介绍说明些常用:转换子、搜索/ 排序子
STRING.H    介绍说明些串操作和内存操作
SYS\\STAT.H   定义在打开和创建文件时用到些符号常量
SYS\\TYPES.H  介绍说明ftime和timeb结构
SYS\\TIME.H   定义时间类型time[ZZ(Z] [ZZ)]t
TIME.H     定义时间转换子asctime、localtime和gmtime结构ctime、 dftime、 gmtime、 localtime和stime用到类型并提供这些原型
VALUE.H    定义些重要常量 包括依赖于机器硬件和为和Unix V相兼容而介绍说明些常量包括浮点和双精度值范围

奔湎拗啤⑹姆段У刃畔ⅰ?
MATH.H     介绍说明数学运算还定了 HUGE VAL 宏 介绍说明了matherr和matherr子用到特殊结构
MEM.H     介绍说明些内存操作(其中大多数也在STRING.H 中介绍说明)
PROCESS.H   介绍说明进程管理各个spawn…和EXEC …结构介绍说明
SETJMP.H    定义longjmp和jmp用到jmp buf类型 介绍说明这两个
SHARE.H    定义文件共享参数
SIGNAL.H    定义SIG[ZZ(Z] [ZZ)]IGN和SIG[ZZ(Z] [ZZ)]DFL常量介绍说明rajse和signal两个
STDARG.H    定义读参数表(如vprf,vscarf)
STDDEF.H    定义些公共数据类型和宏
STDIO.H    定义Kernighan和Ritchie在Unix V 中定义标准和扩展类型和宏还定义标准I/O 预定义流:stdin,stdout和stderr介绍说明 I/O流子
STDLIB.H    介绍说明些常用:转换子、搜索/ 排序子
STRING.H    介绍说明些串操作和内存操作
SYS\\STAT.H   定义在打开和创建文件时用到些符号常量
SYS\\TYPES.H  介绍说明ftime和timeb结构
SYS\\TIME.H   定义时间类型time[ZZ(Z] [ZZ)]t
TIME.H     定义时间转换子asctime、localtime和gmtime结构ctime、 dftime、 gmtime、 localtime和stime用到类型并提供这些原型
VALUE.H    定义些重要常量 包括依赖于机器硬件和为和Unix V相兼容而介绍说明些常量包括浮点和双精度值范围

Tags:  单片机c语言入门 c语言入门经典 c语言入门教程 c语言入门

延伸阅读

最新评论

发表评论