文档介绍:第八章
文件
1
研究式学习—C程序设计(第八章)
上讲内容回顾
指针与字符串
指针数组
指针作为函数参数
数组名作为函数参数
指针型函数
指向函数的指针
指向指针的指针
2
研究式学习—C程序设计(第八章)
本讲主要内容
保存若干个字符到磁盘中
把若干个字符串保存到文本文件
文件的概念、定义及使用规则
与文件操作有关的函数
命令行参数
综合应用举例
3
研究式学习—C程序设计(第八章)
数据的终端输入输出
前几章的数据输入输出都是以终端为对象的,即键盘(标准输入设备)输入数据,屏幕(标准输出设备)输出数据,如此:
内存
Stdin
getc()
scanf()
Stdout
putc()
printf()
难以实现大批量数据的输入和重复利用
难以保存程序的运行结果
当需要利用磁盘上的数据作为输入或需要将程序运行结果保存在磁盘中时,就需要改变数据的输入或输出方式。
4
研究式学习—C程序设计(第八章)
数据的磁盘输入输出
C语言没有专门的输入输出语句,是通过调用输入输出库函数实现数据I/O的,我们完全可以自编函数来完成数据I/O。
C语言提供了丰富的输入输出函数,不仅可以完成终端输入输出,也可将数据以文件形式组织在磁盘上实现从磁盘输入输出
输入
输入
输出
输出
磁盘
文件
内存
键盘
屏幕
5
研究式学习—C程序设计(第八章)
完成数据的读写需要以下几步:
 第一步;以写方式建立并打开一个磁盘文件
 第二步;从键盘逐个输入字符到字符变量中
 第三步;将字符变量中的字符写到打开的磁盘
文件中(内存磁盘)
 第四步;从磁盘文件中的第一个字符开始逐个
读出字符到字符变量中(磁盘内存)
 第五步;将字符变量中的字符显示在显示器上
保存若干个字符到磁盘中
问题的提出
从键盘输入一行字符,把它们永久保存起来,需要的时候再读出
显示在屏幕上。
问题分析
必须建立一个磁盘文件,把内存中的数据写到磁盘文件中保存。再将其读到内存,然后显示出来。
6
研究式学习—C程序设计(第八章)
程序
例8_1 从键盘输入若干行字符, 的文件中,再把该文件内容读出显示在屏幕上。
#include<>
main()
{
FILE *fp; /* 定义文件指针 fp */
char str;
If((fp=fopen(“”,“w”))==NULL) /*打开文件 */
{ printf(“\nCan’t open this file!\n”);
exit(1); }
str=getchar();
while(str!=’\n’)
{ fputc(str,fp);/*把输入的字符写到fp 指向的文件*/
str=getchar(); }
rewind(fp); /*使fp所指的文件读写位置
指针定位于文件开头*/
str=fgetc(fp); /*将fp指向的文件中的字
符赋给str变量*/
while(str!=EOF)
{ putchar(str); /*显示str变量中的字符*/
str=fgetc(fp); }
printf(“\n”);
fcloss(fp); } /* */
C程序对文件操作的一般过程:
打开文件——读/写文件——关闭文件
7
研究式学习—C程序设计(第八章)
把若干个字符串保存到文本文件
问题:
从键盘输入一个班学生的信息,把它们保存起来,需要的时候再读出显示在屏幕上,或者只读出其中指定的一部分学生的信息。
问题分析:
1、需要输入输出结构体等“数据块”的变量的值,用C语言中数据块输入输出函数
fread()和fwrite来输入输出数据。
2、前面介绍的对文件的读写方式都是顺序读写,即读写文件只能从头开始顺序读写各个数据。当只需要读写文件中某一指定的部分时,就需要移动文件内部的位置指针到需要读写的位置,再进行读写,这种方式称为文件的随机读写。
对文件的随机读写需要使用文件定位函数强制改变文件的读写位置。
C语言的文件定位函数有:
fseek()函数、ftell()函数、rewind()函数。
8
研究式学习—C程序设计(第八章)
程序
例8_2 从键盘输入10个学生的信息,每个学生的信息包括学号、姓名、学习成绩,。
void std();
main()
{ int i;
printf(“Input student information:\n");
for(i=0;i<N;i++){
scanf("%ld,%s",&str[i].num,