C语言程序设计 利用文件保存数据

您所在的位置:网站首页 排序的函数c语言怎么写 C语言程序设计 利用文件保存数据

C语言程序设计 利用文件保存数据

2024-07-08 18:14| 来源: 网络整理| 查看: 265

1 C文件的有关概念 1.1 什么是文件

在进行C运用程序设计中,主要用到两种文件: (1)程序文件。包括程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等,用来存放程序的。 (2)数据文件。供程序运行时读入内存的数据。 文件指存储在外部介质上数据的集合。 输入输出是数据传送的过程,输入输出形象地称为流,即输入输出流。流表示了信息从源到目的的流动。

1.2 文件名

文件标识包括三部分: (1)文件路径。表示文件在外部存储设备中的位置。 (2)文件名主干的命名规则遵循标志符的命名规则。 (3)后缀用来表示文件的性质,一般不超3个字符,如:.doc,.txt…

1.3 文件的分类

数据文件可分为ASCII文件和二进制文件。ASCII文件又称文本(txt)文件。

1.4 文件缓冲区

C语言采用缓冲文件系统处理文件,缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区。 C编译系统提供了一些标准输入输出函数,用来对文件进行读写。

1.5 文件类型指针

文件类型指针,简称文件指针。 定义FILE结构体类型的信息包含在头文件“stdio.h”中。在程序中可以直接用FILE类型名定义变量。如:

FILE f;//类比int a;

定义一个指向文件型数据的指针变量:

FILE *fp;

定义fp为一个指向FILE类型变量的指针变量。使fp指向某一个文件的文件信息区,通过文件信息区中的信息能够访问该文件,即通过文件指针变量能够找到与它相关的文件,将这种指向文件信息区的指针变量称为指向文件的指针变量。 指向文件的指针变量是指向内存中的文件信息区的开头。

2 文件的打开和关闭

对文件读写之前应该打开文件,在使用结束之后应关闭该文件。 打开是指为文件建立相应的信息区和文件缓冲区。 关闭是指撤销文件信息区和文件缓冲区。

2.1 用fopen函数打开数据文件

fopen函数的调用方法为

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

例如:

fopen("a1","r");

表示要打开名字为“al”的文件, 使用文件的方式为“读入”(r代表read, 即读入) 。fopen函数的返回值是指向al文件的指针(即al文件信息区的起始地址) 。 通常将fopen函数的返回值赋给一个指向文件的指针变量。如:

FILE *fp; fp=fopen("a1","r");

fp指向了a1文件。 使用文件的方式 在这里插入图片描述 (1)最基本的是最前面的"r"、“w”、"a"三种方式。在其后加“b”表示是二进制文件, 不加“b”的表示是ASCII文件(即文本文件) 。加“+”表示既可读又可写。 (2) 如果不能实现“打开”的任务, fopen函数将会带回一个出错信息。出错的原因可能是用“r”方式打开一个并不存在的文件;磁盘出故障;磁盘已满无法建立新文件等。此时fopen函数将带回一个空指针值NULL(NULL在stdio.h文件中已被定义为0) 。 常用下面的方法打开一个文件:

if((fp=fopen("a1","r"))==NULL) {printf("can not open this file\n"); exit(0); }

编译系统先检查打开的操作有否出错, 如果有错就在终端上输出“can not open this file”。exit函数的作用是关闭所有文件, 终止正在执行的程序, 待用户检查出错误, 修改后再运行。

2.2 用fclose函数关闭文件

关闭文件用fclose函数,fclose函数形式为:

fclose(文件指针);

例如:

fclose(fp);

前面曾把打开文件(用fopen函数) 时所带回的指针赋给了fp,现在把fp指向的文件关闭,此后fp不再指向该文件。 应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件可能会丢失数据。 fclose函数也带回一个值, 当顺利地执行了关闭操作, 则返回值为0; 否则返回EOF(一1) 。

3 文件的顺序读取

顺序读写,对文件读写数据的顺序和数据在文件中的物理顺序是一致的。

3.1 向文件读写字符

读写一个字符的函数 在这里插入图片描述 例题: 从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入一个“#”为止。 思路: 从键盘输入字符,然后用fputc函数写到磁盘文件。 编写程序:

#include #include int main(){ FILE *fp;//定义指向文件的指针变量 char ch,filename[10];//定义字符ch和字符数组filename printf("请输入所用的文件名:"); scanf("%s",filename);//输入文件名 if((fp=fopen("filename","w"))==NULL)//如果打开时出错,就输出“打不开”信息 {printf("无法打开此文件\n"); exit(0);//终止程序 } ch=getchar();//ch用来接收在执行scanf语句时最后输入的回车符 printf("请输入一个准备存储到磁盘的字符串(以#结束):"); ch=getchar();//接收从键盘输入的第一个字符 while(ch!='#')//当输入“#”时结束循环 { fputc(ch,fp);//磁盘文件输出一个字符 putchar(ch);//将输入的字符显示在屏幕上 ch=getchar();//再接受从键盘输入的一个字符 } fclose(fp);//关闭文件 putchar(10);//向屏幕输出一个换行符,换行的ASCII代码为10 return 0; }

运行结果: 在这里插入图片描述 程序分析: (1)本程序采取的方法是由键盘输入文件名。为此设立一个字符数组filename。用来存放文件名。运行时,从键盘输人磁盘文件名“file1.dat”.操作系统就新建立一个磁盘文件file l.c,用来接收程序输出的数据。 (2) 用fopen函数打开一个“只写”的文件(“w”表示只能写人不能从中读数据) , 如果打开成功,丽数的返回值是该文件所建立的信息区的起始地址,把它赋给指针变量fp(fp已定义为指向文件的指针变量)。如果不能成功地打开文件,则在显示器的屏幕上显示“无法打开此文件”, 然后用exit函数终止程序运行。 (3) exit函数是标准C的库函数, 作用是使程序终止,用此函数时在程序的开头应加入stdlib.h头文件。 (4) 用getchar函数接收用户从键盘输人的字符。注意每次只能接收一个字符。现输人准备写人磁盘文件的字符“abc123#”, “#”是用来表示输人的字符串到此结束。 (5)先从键盘读人一个字符,检查它是否“#”?如果是,表示字符串已结束,不执行循环体, 如果不是, 则执行一次循环体,将该字符输出到磁盘文件file1.dat。然后在屏幕上显示出该字符,接着再从键盘读人一个字符。如此反复,直到读人“#"字符为止。这时,程序已将“abc123#”写到以“file1.dat”命名的磁盘文件中了, 同时在屏幕上也显示出了这些字符,以便核对。

3.2 向文件读写一个字符串

通过函数fgets和fputs一次读写一个字符串。 在这里插入图片描述 说明: (1)用fgets函数可以指定的文件读入一个字符串。如:

fgets(str,n,fp);

其中n为要求得到的字符个数,但实际上只从fp指向文件中读入n-1个字符,然后在最后加一个’\0’字符。 (2)用fputs函数可以向指定的文件输出一个字符串。如:

fputs("China",fp);

字符串末尾的’\0’不输出。 (3)fgets函数,第一个字符f代表文件(file),中间的get是“取得”,最后的字母s代表字符串(string),含义是“从文件中取得字符串”。fgetc函数,最后一个字符是c(character),表示读写一个字符。 (4)gets函数和puts函数以终端为读写对象,fputs函数和fputs函数以指定的文件作为读写对象。

例题: 从键盘读入若干个字符串(fgets),对它们按字母大小顺序排序,然后把排好序的字符串送到磁盘文件中保存。 思路: (1)从键盘读人n个字符串,存放在一个二维字符数组中、每一个一维数组存放一个字符串;(2)对字符数组中的n个字符串按字母顺序排序,排好序的字符串仍存放在字符数组中; (3)将字符数组中的字符串顺序输出。 编写程序:

#include #include #include int main(){ FILE *fp;//定义指向文件的指针变量fp char str[3][10],temp[10];//定义3行10列字符串二维数组str和临时的一维数组temp int i,j,k,n=3; printf("enter strings:\n");//提示输入字符串 for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3