以格式化方式读写文件

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

32
printf(“\n有 %d 个自然数可以被13整除,程序结束。\n”, count);
return 0; }
程序的运行结果如何保存?
• 文件: • 文件(的数据)是存放在磁盘上的有 名字的数据集合,文件中的数据可以 长期存储在磁盘上,不受程序是否正 在运行的影响,所以文件也称为磁盘 文件。 文件要有文件名,文件是 通过文件名相互区分。
获取指定区间范围内的数据
• 例如,假设要获取[10,50)区间中的数据,则可以 使用如下形式的语句来产生符合其指定范围的数值: need = 10 + rand() % 40;
举例
• 1.将如下形式的九九表存入一个文本文件。
29
举例
• 3. 建立一个文本文件,存入95个30至100范围 的随机数来模拟一个班里95位学生的一次测验 成绩。 • 4. 修改前一个程序,将模拟成绩做成带一位 小数的数据形式。 • 5. 读学生的成绩文件,统计全班的平均分, 并增写到文件的最后。
举例(续前)
• 6. 建立一个文本文件,向里面随机写入70个小 于100的自然数。即自然数的取值可以由rand() 产生。 • 7. 读取这个文本文件的数据,将不能被13或17 整除的数据写到一个新的文本文件中。 • 8. 从这个含文本文件中挑选最大值和最小值, 追加写到文件的最后(请另起新一行写入)。
(P139 6.2的
利用文件来保存数据
第一部分——格式化读写文件。
徐秋红
信息学院计算机科学与技术
程序的运行结果如何保存?
/* 将1000以内能被13整除的自然数找出来 */ #include <stdio.h> #include <windows.h> int main(void) { int x, count=0; printf("\n能被13整除的自然数是:"); for(x=0; x<1000; x++) { if(x%13==0) { printf(" x = %d \t",x); count++; Sleep(200); } }
3. 从上面的数据文件中读出全部的内容,送到显 示器上显示。
判别是否到达了文件结束位置的函数 —— feof()函数
• 函数原型: int feof(FILE *file_point); • 调用格式: feof(文件类型的指针变量名); • 功能:判断文件读写指针是否处于文件结束 位置,如果指向了文件结束位置,则返回值 为非0值,否则为0。 例如:

在显示器上显示30个随机数。
#include <stdio.h> #include <stdlib.h> int main(void) { int n; for(n = 1; n <= 30; n++) { printf("%d \t", rand()); } return 0; }
srand()能为rand()设置起点种子 值
fprintf(fp,"%d,%6.2f",i,t);
建立数据文件和向文件中写入数据
1. 设计一个程序,使其运行后,可以在屏幕上显 示0、1、2、......、9共10个阿拉伯数字字符。 要求程序只能使用putchar()函数做输出语句。 然后写入一个数据文件中。
2. 设计一个程序,使其运行后,可以在屏幕上显 示26个小写(或大写)的英文字母。要求程序只 能使用putchar()函数做输出语句。最后追加写 入上一个数据文件中。
获取指定区间范围内的数据
• 如果模拟产生某一个数据范围内的随机数,如:产 生符合[a,b)区间内的 x 值,则通过所需数据范围的起 始值a和终结值b,利用如下的算法语句即可:
x = a + rand() % (b-a);
• 其中,a被称为初值,它等于所需的连续整数范围内 的第一个数;(b-a)被称为比例因子,它等于所需的 连续整数范围的宽度。
对文件进行写入操作
格式化读/写文本文件函数: fscanf() / fprintf()
按照给定的格式 占位符字符串的 描述,从文件中 读取数据或向文 件内写入数据
fscanf() ——从文本文件读出 fprintf() ——写入文本文件
格式化方式写文件函数的调用方式
fprintf() 是按照给定的格式说明字符串描述的 形式,向文件内写入数据。
“r+”(读写) “w+”(读写) “a+”(读写)
“rb+”(读写) “wb+”(读写) “ab+”(读写)
为读/写打开一个文本文件 为读/写建立一个新的文本文件 为读/写打开一个文本文件
为读/写打开一个二进制文件 为读/写建立一个新的二进制文件 为读/写打开一个二进制文件
文件的关闭(fclose()函数)
打开文件的函数fopen()
• 例如: 创建/写 FILE *fp; fp = fopen("myfile.txt", "w");
文本文件
上面语句的意义是在当前目录下打开/建立一个 文件myfile.txt ,只允许进行“写”操作,并使 文件指针fp指向该文件。
打开文件的函数fopen()
• 如果要读写指定磁盘或文件夹里的文件,则在给出文件名 在要带有路径信息: FILE *fp; fp = fopen("d:\\myfold\\myfile.txt", "w"); 上面语句的意思是在d:\myfold\文件夹中打开/建立一 个名为 myfile.txt 的文件 ,只允许对它进行“写”操作, 并使文件指针fp指向该文件。 反斜线"\"是转义字符,两个反斜线表示还原"\"原本的字 符形式。


追加
fopen函数中的“文件打开模式”参数用来表明对文件的读写意图
文件打开模式 “r”(只读) “w”(只写) “a”(追加) “rb”(只读) “wb”(只写) “ab”(追加) 含 义 为输入打开一个文本文件 为输出打开一个文本文件 向文本文件尾增加数据 为输入打开一个二进制文件 输出打开一个二进制文件 向二进制文件尾增加数据
30
#include <stdio.h> 建立一个含有若干数据的文 #include <stdlib.h> 本文件,设计C程序将文件中 int main(void) 数据读出来。 { FILE *fp1=NULL; double x; int n=0; fp1=fopen("XXXXXXX.txt","r"); if(fp1==NULL) { printf("\n文件打开失败.\n"); return 0; } fscanf(fp1,"%lf",&x); while(feof(fp1)==0) { printf("%f\t",x); fscanf(fp1,"%lf",&x); n++; } fclose(fp1); printf("\n\n文件读完了,共读出了%d个数据。程序结束。\n\n",n); return 0; }
fprintf(文件指针,格式说明,输出表列);
例: int i = 399; float t = 5.43;
fprintf(fp,"%d,%6.2f",i,t);
格式化方式读/写文件的操作方法
fscanf(文件指针,格式说明,输入表列); fprintf(文件指针,格式说明,输出表列);
例: int i = 399; float t = 5.43; fscanf(fp,"%d%f",&i,&t);
关闭文件:断开文件指针对文件的指向(关联)。 fclose()的调用格式如下:
fclose(要关闭的文件的文件指针);
例如: fclose(fp);
正常关闭文件后,fclose函数返回值为0。 如果返回非零值,则表示关闭过程出错。
if(fclose( fp ) != 0 ) { printf("\n Close fail. \n"); return 0; }
• 为了实现每次执行程序时能获取不同的随机数序列, 可以在程序开始处,调用一次srand()函数来确立伪 随机函数rand()的起点种子值。 • 调用srand()函数的语句是: srand(seed);
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int n; srand( time(NULL) ); for(n = 1; n <= 30; n++) { printf("%d \t", rand() ); } return 0; }
标准库函数和头文件
• 标准库函数 (详见书后的附录)
标准库函数 —— 随机函数rand()
• 随机函数是一个专门产生模拟随机数的函数,一般应 用于程序的模拟测试或游戏软件的制作
使用方式:
x = rand();
每调用一次随机函数rand(),系统都会产生一 个0至RAND_MAX之间的整数,RAND_MAX 是在头文件<stdlib.h>中定义的符号常量, ANSI标准规定RAND_MAX的值不得小于 32767。
feof(fp)
设备文件
标准输出设备文件名stdout 输入 输出 输出 输入
标准输入设备文件名stdin
20
采用格式化形式读写设备文件
fscanf(stdin,"%d%f", &i,&t); 等价 scanf("%d%f", &i,&t);
fprintf(stdout,"%d,%6.2f ", i,t); 等价 printf("%d,%6.2f ", i,t);
课堂练习
• 计算1+3+5+7+9+……+99+101的值。 • 计算1*2*3+3*4*5+……+99*100*101 的值。 • 计算a+aa+aaa+aaaa+……+a……aa 的 值,用n表示被加的某项数据的a的 个数(例如,n为3时,表示aaa), n和a的值由键盘输入。
(1)(2)(3))
C程序处理文件的流程如下
声明文件指针
打开文件 读/写文件
关闭文件
•在C语言中, 处理文件的过程 都是由标准库函 数完成的,而这 个库函数包含在 头文件stdio.h 中。
Hale Waihona Puke Baidu
声明文件指针
• C程序是用一个指针来指向(指认)一个 文件,这个指针称为文件指针。文件指针 用FILE类型去声明: FILE *指针变量名; 其中,FILE应为大写,它是一个结构体 类型,定义在头文件stdio.h中。 • 声明文件指针的例子: FILE *fp;
对于文件访问方式说明
1.文件访问方式是:
r(read) --读 a(append) --追加 w(write) --写 + --读和写
2.用“r”打开一个文件时,该文件必须已经存在,且 只能从该文件读出数据。 3.用“w”打开的文件只能向该文件写入数据。若打开 的文件不存在,则以指定的文件名建立该文件,若打 开的文件已经存在,则删除此文件,重建一个同名的 新文件(文件原有内容被清除)。 4.若要向一个已存在的文件追加新的信息,只能用 “a”方式打开文件。若文件不存在,则以指定的文件 名建立该文件
打开文件的操作
打开一个文件时,如果出错,fopen()返回一个 空指针值NULL。可以用这一信息来判别打开文 件的动作是否成功。 例如:打开文件的程序段可以这样写: FILE *fp=NULL; if ((fp = fopen("test.dat", "w")) == NULL) { printf("\n 文件打开失败! \n");return 0; }
相关文档
最新文档