当前位置: 首页 > news >正文

哪个行业建设网站的需求多北京做网站的公司

哪个行业建设网站的需求多,北京做网站的公司,佛山网站推广软件,安徽建设监理协会网站总言 C语言#xff1a;文件操作。    文章目录总言1、文件是什么#xff1f;为什么需要文件#xff1f;1.1、为什么需要文件#xff1f;1.2、文件是什么#xff1f;2、文件的打开与关闭2.1、文件指针2.2、文件打开和关闭#xff1a;fopen、fclose2.3、文件使用方式3、文…总言 C语言文件操作。    文章目录总言1、文件是什么为什么需要文件1.1、为什么需要文件1.2、文件是什么2、文件的打开与关闭2.1、文件指针2.2、文件打开和关闭fopen、fclose2.3、文件使用方式3、文件的顺序读写3.1、字符输入输出fputc、fgetc3.1.1、fputc3.1.2、fgetc3.2、适用于所有流stream的简单介绍3.3、文本输入输出fputs、fgets3.3.1、fputs3.3.2、fgets3.4、格式化输入输出fscanf、fprintf3.4.1、fprintf3.4.2、fscanf3.5、与字符串相关的输入输出sscanf、sprintf3.5.1、对比说明3.5.2、使用介绍3.6、二进制输入输出fread、fwrite3.6.1、fwrite3.6.2、fread4、文件的随机读写4.1、fseek4.2、ftell4.3、rewind5、其它相关内容5.1、文本文件和二进制文件5.2、文件读取结束判定5.3、文件缓冲区1、文件是什么为什么需要文件 1.1、为什么需要文件 模拟实现通讯录时会面临这样一个实际问题在通讯录中把信息记录下来后只有在我们自己选择删除数据的情况下数据才不复存在否则需要长久保留数据。   这就涉及到了数据持久化的问题一般数据持久化的方法有把数据存放在磁盘文件、存放到数据库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上做到了数据的持久化。       1.2、文件是什么 1、文件分类   磁盘上的文件是文件。但在程序设计中从文件功能的角度来看一般文件有两种程序文件、数据文件。   程序文件包括源程序文件后缀为.c,目标文件windows环境后缀为.obj,可执行程序windows环境后缀为.exe。   数据文件 文件的内容不一定是程序而是程序运行时读写的数据比如程序运行需要从中读取数据的文件或者输出内容的文件。         2、文件名称   一个文件要有一个唯一的文件标识以便用户识别和引用。为了方便起见文件标识常被称为文件名。   文件名包含3部分文件路径文件名主干文件后缀 D:\日常\TIM\Tencent Files\All Users\test.txt 文件路径D:\日常\TIM\Tencent Files\All Users\ 文件名主干:test 文件后缀.txt2、文件的打开与关闭 2.1、文件指针 1、文件指针是什么 缓冲文件系统中关键的概念是“文件类型指针”简称“文件指针”。   每个被使用的文件都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息如文件的名字文件状态及文件当前的位置等。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的取名FILE。 不同的C编译器的FILE类型包含的内容不完全相同但是大同小异。每当打开一个文件的时候系统会根据文件的情况自动创建一个FILE结构的变量并填充其中的信息使用者不必关心细节。         VS2019下FILE声明 #ifndef _FILE_DEFINED#define _FILE_DEFINEDtypedef struct _iobuf{void* _Placeholder;} FILE; #endifVS2013编译环境提供的 stdio.h 头文件中有以下的文件类型申明 struct _iobuf {char *_ptr;int _cnt;char *_base;int _flag;int _file;int _charbuf;int _bufsiz;char *_tmpfname;}; typedef struct _iobuf FILE;一般通过一个FILE的指针来维护这个FILE结构的变量这样使用起来更加方便。      2、文件指针的作用 我们可以创建一个FILE*的指针变量如下 FILE* pf;定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区是一个结构体变量。通过该文件信息区中的信息就能够访问该文件。也就是说通过文件指针变量能够找到与它关联的文件。          2.2、文件打开和关闭fopen、fclose 1、fopen、fclose函数介绍   相关函数链接fopen fopen FILE * fopen ( const char * filename, const char * mode );const char * filename所需要打开的文件名称。   const char * mode打开文件的方式此处类型为字符指针用于存放字符串首字符的地址。   FILE *在内存中创建一个与打开文件有关的文件信息区同时返回一个文件指针该指针指向文件信息区的起始地址结构体。   NULL如果文件打开失败则返回空指针同动态内存一致需要进行判空操作若错误则显示错误原因并结束程序。         相关链接fclose fclose int fclose ( FILE * stream );FILE * stream向指定要关闭的FILE指针         2、使用举例 int main() {//打开文件FILE* pf fopen(test.txt, r);//“r”此处为字符串用双引号r是一种文件读取模式if (pf NULL){perror(fopen);return 1;}//读文件//……//关闭文件fclose(pf);pf NULL;return 0; }情形一 情形二      情形三绝对路径与相对路径说明   假如要打开的文件不在当前路径下需要使用对应路径打开          2.3、文件使用方式 以下mode会在后续学习中慢慢用到。          3、文件的顺序读写 3.1、字符输入输出fputc、fgetc 3.1.1、fputc 相关函数链接fputc fputc int fputc ( int character, FILE * stream );将字符character按顺序写入对应的文件流stream中此处使用的是文件指针。如果失败则返回EOF。 演示如下 int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, w);if (pf NULL){perror(fopen);return 1;}//读写文件for (char ch a; ch z; ch){fputc(ch, pf);}//关闭文件fclose(pf);pf NULL;return 0; }3.1.2、fgetc 相关函数链接fgetc fgetc int fgetc ( FILE * stream );从对应的文件指针指向的文件中按顺序依次读取字符若遇到文件结尾/错误则返回EOF若成功则返回字符读取提升为 int 值。      使用演示 int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, r);if (pf NULL){perror(fopen);return 1;}//读写文件int ch;while ((ch fgetc(pf)) ! EOF){printf(%c , ch);}//关闭文件fclose(pf);pf NULL;return 0; } 3.2、适用于所有流stream的简单介绍 我们知道各种各样的外部设备比如键盘、屏幕、U盘、硬盘、网卡等数据信息的读写在它们之间进行交换但不同的设备其读写方式可能存在差异这样一来使用效率就会大幅降低因为我们在做数据输入输出的前提是要学习了解它们的原理。因此为了简化这一过程我们在这些外设间引入一个中间商即流用于输入输出。这样一来我们在各种数据交换时就不必关心流与这些外设间是如何做到数据信息交换的相当于一种封装。 相关演示 int main() {int ch fgetc(stdin);printf(%c , ch);fputc(ch, stdout);return 0; }3.3、文本输入输出fputs、fgets 3.3.1、fputs 相关函数链接fputs   相关演示 int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, w);if (pf NULL){perror(fopen);return 1;}//读写文件fputs(落霞与孤鹜齐飞, pf);fputs(秋水共长天一色。\n, pf);fputs(渔舟唱晚响穷彭蠡之滨\n, pf);fputs(雁阵惊寒声断衡阳之浦。\n, pf);//关闭文件fclose(pf);pf NULL;return 0; }可以看到没加换行符fputs会将当前内容放置于上此文尾若加了换行符则另起一行。 3.3.2、fgets 相关函数链接fgets 若成功则返回str指针指向地址若失败则返回NULL      相关演示一 int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, r);if (pf NULL){perror(fopen);return 1;}char arr[255];//读写文件fgets(arr, 254, pf);printf(%s\n, arr);while (fgets(arr, 254, pf)!NULL)printf(%s, arr);//关闭文件fclose(pf);pf NULL;return 0; } 验证fgets会保留一位将\0放入: int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, r);if (pf NULL){perror(fopen);return 1;}char arr[10]XXXXXXXXXX;//读写文件fgets(arr, 5, pf);printf(%s\n, arr);//关闭文件fclose(pf);pf NULL;return 0; } 3.4、格式化输入输出fscanf、fprintf 3.4.1、fprintf 相关函数链接printf   printf是将相关内容打印到标准输出即屏幕上   fprintf适用于任意流可将相关内容打印到指定的stream中。      相关演示 struct st {char name[20];int age;double score; };int main() {//创建一个学生数据要求将该学生数据的内容存入指定文件中struct st s1 { 张三,25,98.00 };//打开文件FILE* pf fopen(D:\\Daily\\test.txt, w);if (pf NULL){perror(fopen);return 1;}//读写文件fprintf(pf,%s %d %lf, s1.name, s1.age, s1.score);//关闭文件fclose(pf);pf NULL;return 0; } 3.4.2、fscanf 相关函数链接fscanf scanf是从标准输入流中读取数据一般是键盘   fscanf适用于任意流可从指定的流stream中读取数据。      相关演示 struct st {char name[20];int age;double score; };int main() {//创建一个学生数据要求从指定文件中读取相关数据信息填入该结构体中struct st s1 {0};//打开文件FILE* pf fopen(D:\\Daily\\test.txt, r);if (pf NULL){perror(fopen);return 1;}//读写文件fscanf(pf, %s %d %lf, s1.name, (s1.age), (s1.score));//注意name为数组名本身就是地址故无需取地址操作符其它二者读取时与scanf别无差异fprintf(stdout, %s %d %lf, s1.name, s1.age, s1.score);//关闭文件fclose(pf);pf NULL;return 0; } 3.5、与字符串相关的输入输出sscanf、sprintf 3.5.1、对比说明 1、scanf/printf、fscanf/fprintf、sscanf、sprintf对比说明 scanf针对标准输入输出流的格式化输入函数Read formatted data from stdin   printf针对标准化输入输出流的格式化输出函数Print formatted data to stdout scanf int scanf ( const char * format, ... );printf int printf ( const char * format, ... );fscanf针对所有输入流的格式化输入函数Read formatted data from stream   fprintf针对所有输出流的格式化输出函数Write formatted data to stream fscanf int fscanf ( FILE * stream, const char * format, ... );fprintf int fprintf ( FILE * stream, const char * format, ... );sscanf把一个字符串数据转换为格式化数据Read formatted data from string   sprintf把一个格式化的数据转换为字符串数据Write formatted data to string sscanf int sscanf ( const char * s, const char * format, ...);sprintf int sprintf ( char * str, const char * format, ... );3.5.2、使用介绍 相关函数链接sprintf      相关函数链接sscanf 使用举例 struct st {char name[20];int age;double score; };int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, r);if (pf NULL){perror(fopen);return 1;}//读写操作struct st s1 { 李四,23,94.5 };//原数据struct st stof { 0 };//未赋有效值的结构体用于存放从字符串中转换过来的格式化数据char ftos[255];//字符数组用于存放从格式化数据中转换得到的字符串//使用sprintf将格式化数据转换成字符串sprintf(ftos, %s %d %lf, s1.name, s1.age, s1.score);printf(ftos数组中%s\n, ftos);//使用sscanf将字符串转换为格式化数据sscanf(ftos, %s %d %lf, stof.name, (stof.age), (stof.score));printf(stof结构体中%s %d %lf\n, stof.name, stof.age, stof.score);//关闭文件fclose(pf);pf NULL;return 0; }3.6、二进制输入输出fread、fwrite 3.6.1、fwrite 相关函数链接fwrite   注意理解该函数各参数含义ptr是要写入的元素数组的指针size是单个此类数据的大小每个元素的大小count是要写入这类数据的数目元素个数stream为指定输出的流。 fwrite size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );相关演示 struct st {char name[20];int age;double score; };int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, wb);if (pf NULL){perror(fopen);return 1;}//读写操作struct st s1 { 李四,23,94.5 };fwrite(s1, sizeof(struct st), 1, pf);//含义将s1中的数据输出至pf中个数为1个每个大小为sizeof(struct st)//关闭文件fclose(pf);pf NULL;return 0; }3.6.2、fread 相关函数链接fread 相关演示 struct st {char name[20];int age;double score; };int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, rb);if (pf NULL){perror(fopen);return 1;}//读写操作struct st s1 { 0 };fread(s1, sizeof(struct st), 1, pf);printf(%s %d %lf\n, s1.name, s1.age, s1.score);//关闭文件fclose(pf);pf NULL;return 0; } 4、文件的随机读写 4.1、fseek 相关函数链接fseek   根据文件指针的位置和偏移量重新定位文件指针。 SEEK_SET Beginning of file SEEK_CUR Current position of the file pointer SEEK_END End of file *1、关于随机位置读取 int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, r);if (pf NULL){perror(fopen);return 1;}//文件读写////文件中存储的例句turn lemon into lemonade.for (int i 0; i 4; i){printf(%c, fgetc(pf));//turn}printf(\n);//至此文件指针指向trun lemon中的空白字符//演示一以当前文件指针作为参考点fseek(pf, -1, SEEK_CUR);//当前指向turn中的nprintf(文件向左偏移一位后%c\n, fgetc(pf));//fgetc读取后后挪一位到空白字符fseek(pf, 1, SEEK_CUR);//当前指向为lemon中的lprintf(文件向右偏移一位后:%c\n, fgetc(pf));//fgetc读取后后挪一位到eprintf(\n);//演示二以文件头作为参考点此时偏移量不能为负数fseek(pf, 3, SEEK_SET);//当前指向trun中的nprintf(文件向右偏移三位后:%c\n, fgetc(pf));printf(再次读取一位:%c\n, fgetc(pf));printf(\n);//演示三以文件尾作为参考点此时偏移量不能为正数fseek(pf, -3, SEEK_END);//当前指向为lemonade.中的dprintf(文件向左偏移三位后:%c\n, fgetc(pf));printf(再次读取一位:%c\n, fgetc(pf));printf(\n);////关闭文件fclose(pf);pf NULL;return 0; }2、关于随机位置写入 int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, w);if (pf NULL){perror(fopen);return 1;}//文件读写//for (char ch a; ch z; ch){fputc(ch,pf);}//演示一以当前文件指针作为参考点fseek(pf, -22, SEEK_CUR);fputc(S, pf);//演示二以文件头作为参考点此时偏移量不能为负数fseek(pf, 6, SEEK_SET);fputc(O, pf);//演示三以文件尾作为参考点此时偏移量不能为正数fseek(pf, -3, SEEK_END);fputc(S, pf);////关闭文件fclose(pf);pf NULL;return 0; }4.2、ftell 返回文件指针相对于起始位置的偏移量   相关函数链接ftell      代码演示如下 int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, w);if (pf NULL){perror(fopen);return 1;}//文件读写//for (char ch a; ch z; ch){fputc(ch,pf);}fseek(pf, -22, SEEK_CUR);fputc(S, pf);long int pos ftell(pf);printf(%ld\n, pos);////关闭文件fclose(pf);pf NULL;return 0; }4.3、rewind 相关函数链接rewind   让文件指针的位置回到文件的起始位置 相关演示 int main() {//打开文件FILE* pf fopen(D:\\Daily\\test.txt, w);if (pf NULL){perror(fopen);return 1;}//文件读写//for (char ch a; ch z; ch){fputc(ch,pf);}fseek(pf, -22, SEEK_CUR);fputc(S, pf);long int pos ftell(pf);printf(%ld\n, pos);rewind(pf);printf(%ld\n, ftell(pf));////关闭文件fclose(pf);pf NULL;return 0; }5、其它相关内容 5.1、文本文件和二进制文件 1、数据文件分类   根据数据的组织形式数据文件被称为文本文件或者二进制文件。   数据在内存中以二进制的形式存储如果不加转换直接输出到外存就是二进制文件。   如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。 2、数据在内存中的存储方式   字符型数据一律以ASCII形式存储   数值型数据既可以用ASCII形式存储也可以使用二进制形式存储。       3、举例演示   以整数10000为例子      一个测试代码   我们以二进制的形式将正数10000写入文件中 #include stdio.h int main() {int a 10000;FILE* pf fopen(D:\\Daily\\test.txt, wb);fwrite(a, 4, 1, pf);//二进制的形式写到文件中fclose(pf);pf NULL;return 0; }假如用文本文件的形式打开可以看到是乱码   现在我们在VS中以二进制的形式打开需要做一点设置操作如下 5.2、文件读取结束判定 1、关于feof函数说明   在文件读取过程中不能用feof函数的返回值直接用来判断文件的是否结束。feof是应用于当文件读取结束的时候判断是读取失败结束还是遇到文件尾结束。         2、关于文件读取结束说明   根据文件类型的区别判断文件读取结束具有一定区别 对文本文件读取是否结束有两种判断方法1、判断返回值是否为 EOF2、判断返回值是否为 NULL 。   例如fgetc 函数中判断文件读取结束是看是否返回 EOF而fgets判断文件读取结束是看返回值是否为 NULL。 对二进制文件读取是否结束可通过返回值是否小于实际要读的个数来判断。   例如fread判断返回值是否小于实际要读的个数。          5.3、文件缓冲区 1、什么是文件缓冲区   ANSIC 标准采用“缓冲文件系统”处理的数据文件。所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。 2、为什么需要文件缓冲区   文件缓冲区是一个链接内存与硬盘的过渡段从内存向磁盘输出数据会先送到内存中的缓冲区装满缓冲区后才一起送到磁盘上。之所以要这样做是因为内存和硬盘处理数据的速度不一若直接从磁盘中读取数据输送到内存 会面临频繁访问、占用内存资源的现象。故而在二者之间搭建出一个中间商。   需要注意的是缓冲区的大小是根据C编译的系统来决定。
http://www.sczhlp.com/news/159278/

相关文章:

  • 网站建设玖金手指排名12摄影作品展示网站flash全站源码
  • 怎么做品牌推广网站广州番禺人才网官网
  • 做视频特效的网站珠海的门户网站有哪些
  • 北京市建设工程第四检测所网站做网站开票内容是什么
  • 电子网站建设基本流程图怎么做网站规划书
  • 零食天堂专做零食推荐的网站怎么分析网页界面设计
  • 学网站建设难不难网络平台制作方法
  • 长春建站怎么做网络货运平台有哪些
  • 免费网站制作 优帮云做网站会什么问题
  • 深圳企业公司做网站wordpress怎么在文章中做一个单词链接到本文章中的一段文字
  • 网站搭建申请python网站开发高并发
  • 韩国儿童才艺网站建设模板建设银行积分商城网站
  • 网站页面制作公司外贸营销方式有哪些
  • 网站建设及维护流程合肥市住房建设局网站
  • 装饰网站卧室做炕百度高新公司网站建设哪家好
  • 企业网站布局长沙做网站排名
  • 企业网站的建设论文上海百度推广开户
  • 开发网站要注意什么北京城建建设工程有限公司网站
  • 简单大气食品农业网站源码好看云在线网站模板
  • 做兼职上什么网站找机关门户网站建设要求
  • 宿州高端网站建设公司成都私人网站制作公司
  • 购物分享网站模板河南省罗山县做网站的公司
  • 南宁上林网站建设网站排名方法
  • 天津手机网站公司建网方案策划书
  • 怎么做卖保险的网站可以安装wordpress
  • seo优化网站源码国内免费saas+crm
  • 公众号链接电影网站怎么做网站开发前如何配置电脑
  • 招商网站如何做推广服务号 订阅号
  • 做产地证网站泰安的网站建设公司
  • 字画网站建设柒比贰Wordpress