徐州集团网站建设报价网站所属权

张小明 2026/1/12 0:22:14
徐州集团网站建设报价,网站所属权,广州制作外贸网站,哪里网站开发小程序目录 1. 为什么使⽤⽂件#xff1f; 2. 什么是⽂件#xff1f; 2.1 程序⽂件 2.2 数据⽂件 2.3 ⽂件名 3. ⼆进制⽂件和⽂本⽂件 4. ⽂件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 ⽂件指针 4.3 ⽂件的打开和关闭 5. 文件的顺序读写 5.1 顺序读写…目录1. 为什么使⽤⽂件2. 什么是⽂件2.1 程序⽂件2.2 数据⽂件2.3 ⽂件名3. ⼆进制⽂件和⽂本⽂件4. ⽂件的打开和关闭4.1 流和标准流4.1.1 流4.1.2 标准流4.2 ⽂件指针4.3 ⽂件的打开和关闭5. 文件的顺序读写5.1 顺序读写函数介绍5.2 对⽐⼀组函数fprintf函数的使用sscanf函数的使用6. ⽂件的随机读写6.1 fseek6.2 ftell6.3 rewind7. ⽂件读取结束的判定7.1 被错误使⽤的 feof8. ⽂件缓冲区1. 为什么使⽤⽂件如果没有⽂件我们写的程序的数据是存储在电脑的内存中如果程序退出内存回收数据就丢失 了等再次运⾏程序是看不到上次程序的数据的如果要将数据进⾏持久化的保存我们可以使⽤ ⽂件2. 什么是⽂件磁盘硬盘上的⽂件是⽂件。但是在程序设计中我们⼀般谈的⽂件有两种程序⽂件、数据⽂件从⽂件功能的⻆度来分类 的2.1 程序⽂件程序⽂件包括源程序⽂件后缀为.c,⽬标⽂件windows环境后缀为.obj,可执⾏程序windows 环境后缀为.exe2.2 数据⽂件⽂件的内容不⼀定是程序⽽是程序运⾏时读写的数据⽐如程序运⾏需要从中读取数据的⽂件或 者输出内容的⽂件本章讨论的是数据⽂件在以前各章所处理数据的输⼊输出都是以终端为对象的即从终端的键盘输⼊数据运⾏结果显⽰到 显⽰器上其实有时候我们会把信息输出到磁盘上当需要的时候再从磁盘上把数据读取到内存中使⽤这⾥处 理的就是磁盘上⽂件。2.3 ⽂件名⼀个⽂件要有⼀个唯⼀的⽂件标识以便⽤⼾识别和引⽤。⽂件名包含3部分⽂件路径⽂件名主⼲⽂件后缀例如c:\code\test.txt为了⽅便起⻅⽂件标识常被称为⽂件名3. ⼆进制⽂件和⽂本⽂件根据数据的组织形式数据⽂件被称为⽂本⽂件和⼆进制⽂件。数据在内存中以⼆进制的形式存储如果不加转换的输出到外存的⽂件中就是⼆进制⽂件。如果要求在外存上以ASCII码的形式存储则需要在存储前转换。以ASCII字符的形式存储的⽂件就是文本⽂件⼀个数据在⽂件中是怎么存储的呢字符⼀律以ASCII形式存储数值型数据既可以⽤ASCII形式存储也可以使⽤⼆进制形式存储。如有整数10000以ASCII码的形式输出到磁盘则磁盘中占⽤5个字节每个字符⼀个字节⽽ ⼆进制形式输出则在磁盘上只占4个字节。测试代码#includestdio.h int main() { int a 10000; FILE* pf fopen(project.txt, w); // 文本写入模式 fprintf(pf, %d, a); // 以文本形式写入数字 fclose(pf); return 0; }最终的结果以上的文本是自动生成好的而我是使用写的方式打开那个文件所以里面会生成一个100004. ⽂件的打开和关闭4.1 流和标准流4.1.1 流我们程序的数据需要输出到各种外部设备也需要从外部设备获取数据不同的外部设备的输⼊输出 操作各不相同为了⽅便程序员对各种设备进⾏⽅便的操作我们抽象出了流的概念我们可以把流想象成流淌着字符的河C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。⼀般情况下我们要想向流⾥写数据或者从流中读取数据都是要打开流然后操作。4.1.2 标准流那为什么我们从键盘输⼊数据向屏幕上输出数据并没有打开流呢那是因为C语⾔程序在启动的时候默认打开了3个流• stdin-标准输⼊流在⼤多数的环境中从键盘输⼊scanf函数就是从标准输⼊流中读取数据。• stdout-标准输出流⼤多数的环境中输出⾄显⽰器界⾯printf函数就是将信息输出到标准输出 流中。• stderr-标准错误流⼤多数环境中输出到显⽰器界⾯。这是默认打开了这三个流我们使⽤scanf、printf等函数就可以直接进⾏输⼊输出操作的。stdin、stdout、stderr 三个流的类型是FILE *通常称为⽂件指针。C语⾔中就是通过FILE *的⽂件指针来维护流的各种操作的4.2 ⽂件指针缓冲⽂件系统中关键的概念是“⽂件类型指针”简称“⽂件指针”。每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区⽤来存放⽂件的相关信息如⽂件的名字⽂件状态及⽂件当前的位置等。这些信息是保存在⼀个结构体变量中的。该结构体类型是由系统声明的取名FILE例如VS2013编译环境提供的stdio.h头⽂件中有以下的⽂件类型申明:struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE;不同的C编译器的FILE类型包含的内容不完全相同但是⼤同⼩异。每当打开⼀个⽂件的时候系统会根据⽂件的情况⾃动创建⼀个FILE结构的变量并填充其中的信 息使⽤者不必关⼼细节⼀般都是通过⼀个FILE的指针来维护这个FILE结构的变量这样使⽤起来更加⽅便。下⾯我们可以创建⼀个FILE*的指针变量:FILE* pf;//⽂件指针变量定义pf是⼀个指向FILE类型数据的指针变量。可以使pf指向某个⽂件的⽂件信息区是⼀个结构体变 量。通过该⽂件信息区中的信息就能够访问该⽂件。也就是说通过⽂件指针变量能够间接找到与它关联的⽂件。⽐如:4.3 ⽂件的打开和关闭⽂件在读写之前应该先打开⽂件在使⽤结束之后应该关闭⽂件。在编写程序的时候在打开⽂件的同时都会返回⼀个FILE*的指针变量指向该⽂件也相当于建⽴了 指针和⽂件的关系ANSIC规定使⽤fopen函数来打开⽂件fclose来关闭⽂件。函数原型如下// 打开⽂件 FILE * fopen ( const char * filename, const char * mode ); // 关闭⽂件 int fclose ( FILE * stream );mode表⽰⽂件的打开模式下⾯都是⽂件的打开模式实例代码在没有text.txt文件进行运行代码的时候会出先找不到这几个英文字因为我们是以r 读的形式进行打开文件的上面的代码是以w 写的形式所以会自动帮我们生成一个相对应的文件这里就不行了所以我们在使用r 等读的形式进行打开文件的时候必须有一个对应的文本提供给我们去打开int main() { //打开文件 FILE* pf fopen(text.txt, r); if (pf NULL) { perror(pf); return 1; } //关闭文件 fclose(pf); pf NULL; return 0; }输出结果此时我们创建一个可以给我们打开的文件输出结果如下此时我们的代码没有了之前出现的那几行英文字母说明我们这的读的形式打开文件是成功的5. 文件的顺序读写5.1 顺序读写函数介绍上⾯说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流如⽂件输⼊流所有输出流⼀般指适⽤于标准输出流和其他输出流如⽂件输出流这里我们就先介绍几个fputc的使用函数原型int fputc ( int character, FILE * stream );代码演示int main() { //打开文件 FILE* pf fopen(text.txt, w); if (pf NULL) { perror(fopen); return 1; } //写文件 fputc(a, pf); fputc(b, pf); fputc(m, pf); fputc(z, pf); //关闭文件 fclose(pf); pf NULL; return 0; }输出结果fgetc的使用函数原型int fgetc ( FILE * stream );代码演示fgetc的使用 int main() { //打开文件 FILE* pf fopen(project.txt, r); if (pf NULL) { perror(fopen); return 1; } //读文件 int ch 0; while ((ch fgetc(pf)) ! EOF) { printf(%c, ch); } //关闭文件 fclose(pf); pf NULL; return 0; }5.2 对⽐⼀组函数scanf / fscanf / sscanfprintf / fprintf / sprintffprintf函数的使用函数原型int fprintf ( FILE * stream, const char * format, ... );代码演示struct S { char name[20]; int age; float score; }; int main() { struct S s { 小龙,19,60 }; FILE* pf fopen(project.txt, w); if (pf NULL) { perror(fopen); return 1; } //写文件 fprintf(pf,%s %d %f, s.name, s.age, s.score); //关闭文件 fclose(pf); pf NULL; return 0; }输出结果sscanf函数的使用函数原型:int sscanf ( const char * s, const char * format, ...);代码演示struct S { char name[20]; int age; float score; }; int main() { char buf[200] { 0 }; struct S s { 小龙,19,60.5f }; sprintf(buf ,%s %d %f, s.name, s.age, s.score); printf(1.以字符串的形式%s\n, buf); struct S t { 0 }; sscanf(buf ,%s %d %f , t.name, (t.age), (t.score)); printf(2.按照格式来打印:%s %d %f\n,t.name,t.age,t.score); return 0; }输出结果6. ⽂件的随机读写6.1 fseek根据⽂件指针的位置和偏移量来定位⽂件指针⽂件内容的光标函数原型int fseek ( FILE * stream, long int offset, int origin )代码演示int main() { FILE* pf fopen(project.txt, r); if (pf NULL) { perror(fopen); return 1; } printf(文件内容abcdefghi\n\n); printf(三种情况演示\n); // 情况1SEEK_CUR从当前位置偏移 fseek(pf, 0, SEEK_SET); // 回到开头 fseek(pf, 3, SEEK_CUR); // 从位置0移动3位 int ch fgetc(pf); printf(1. fseek(pf, 3, SEEK_CUR): %c\n, ch); // d位置3 // 情况2SEEK_SET从文件开头 fseek(pf, 6, SEEK_SET); // 直接到位置6 ch fgetc(pf); printf(2. fseek(pf, 6, SEEK_SET): %c\n, ch); // g位置6 // 情况3SEEK_END从文件末尾 fseek(pf, -3, SEEK_END); // 从末尾往前3位 ch fgetc(pf); printf(3. fseek(pf, -3, SEEK_END): %c\n, ch); // g位置6 fclose(pf); return 0; }输出结果6.2 ftell返回⽂件指针相对于起始位置的偏移量函数原型long int ftell ( FILE * stream );代码演示int main() { FILE* pf fopen(project.txt, r); if (pf NULL) { perror(fopen); return 0; } //读文件 int ch fgetc(pf); printf(%c\n, ch); //此时只输出一个a fseek(pf, 0, SEEK_END); printf(%d\n, ftell(pf)); //找出的偏移量是9 //关闭文件 fclose(pf); pf NULL; return 0; }输出结果✅ 总结这个代码演示了fgetc()读取一个字符fseek(pf, 0, SEEK_END)移动到文件末尾ftell(pf)获取当前位置即文件大小6.3 rewind让⽂件指针的位置回到⽂件的起始位置函数原型void rewind ( FILE * stream );代码演示int main() { FILE* pf fopen(project.txt, r); if (pf NULL) { perror(fopen); return 1; } //读文件 //第一次 int ch fgetc(pf); printf(%c\n, ch); //此时只输出一个a fseek(pf, -4, SEEK_END); //第二次 ch fgetc(pf); printf(%c\n, ch); // 输出f rewind(pf); // 等价于 fseek(pf, 0, SEEK_SET)回到位置0 //第三次 ch fgetc(pf); printf(%c\n, ch); //输出a //关闭文件 fclose(pf); pf NULL; return 0; }输出结果代码解析第一次位置0字符 a fseek后位置5 第二次位置5字符 f rewind后位置0 第三次位置0字符 a7. ⽂件读取结束的判定7.1 被错误使⽤的 feof牢记在⽂件读取过程中不能⽤feof 函数的返回值直接来判断⽂件的是否结束feof 的作⽤是当⽂件读取结束的时候判断读取结束的原因是否是遇到⽂件尾结束。1. ⽂本⽂件读取是否结束判断返回值是否为EOF fgetc 或者 NULL fgets例如fgetc 判断是否为 EOFfgets 判断返回值是否为 NULL2. ⼆进制⽂件的读取结束判断判断返回值是否⼩于实际要读的个数。例如fread判断返回值是否⼩于实际要读的个数⽂本⽂件的例⼦int main() { FILE* pf fopen(project.txt, r); if (pf NULL) { perror(fopen); return 1; } //读文件 int ch 0; while ((ch fgetc(pf)) ! EOF) { printf(%c\n,ch); } //判断是什么原因导致的文件读取结束的 if (feof(pf)) { printf(遇到文件末尾。读取文件正常); } else if(ferror(pf)) { perror(fgetc); } //关闭文件 fclose(pf); pfNULL; return 0; }输出结果代码解析循环读取文件内容//读文件 int ch 0; while ((ch fgetc(pf)) ! EOF) { printf(%c\n, ch); }执行过程int ch 0定义整型变量ch用int而不是char是为了存储EOFwhile ((ch fgetc(pf)) ! EOF)fgetc(pf)每次读取一个字符EOF文件结束标志值为 -1读取成功 → 执行循环体读取到文件尾 → 退出循环知识点fgetc()每次读取一个字符文件指针自动后移EOFEnd Of File#define EOF (-1)为什么用int而不是charchar可能无法存储-1某些系统中char是无符号的判断读取结束原因//判断是什么原因导致的文件读取结束的 if (feof(pf)) { printf(遇到文件末尾。读取文件正常); } else if(ferror(pf)) { perror(/fgetc); }执行过程feof(pf)检查是否到达文件末尾如果是因为正常读到文件尾而结束返回非零值ferror(pf)检查是否发生读取错误如果是因为错误如磁盘故障而结束返回非零值知识点feof()检查文件结束标志是否被设置ferror()检查文件错误标志是否被设置8. ⽂件缓冲区ANSI C标准采⽤“缓冲⽂件系统”处理数据⽂件的所谓缓冲⽂件系统是指系统⾃动地在内存中为程 序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲 区装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读⼊数据则从磁盘⽂件中读取数据输⼊ 到内存缓冲区充满缓冲区然后再从缓冲区逐个地将数据送到程序数据区程序变量等。缓冲 区的⼤⼩根据C编译系统决定的。这⾥可以得出⼀个结论 因为有缓冲区的存在C语⾔在操作⽂件的时候需要做刷新缓冲区或者在⽂件操作结束的时候关闭⽂件以上就是我们的全部内容了
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

西安网站建设第一品牌怎么样建设自己的网站

高效掌握模拟电子技术的完整学习指南 【免费下载链接】模电学习资料笔记PDF版 这份模拟电子技术学习资料笔记由NONO.97精心整理,以PDF格式呈现,内容详实且条理清晰,涵盖了模电学习的核心知识点。无论是电子工程专业的学生,还是对模…

张小明 2026/1/7 2:11:41 网站建设

南昌网站建设模板总部上传网站数据库吗

从零开始掌握Artisan:咖啡烘焙师的终极可视化工具指南 【免费下载链接】artisan artisan: visual scope for coffee roasters 项目地址: https://gitcode.com/gh_mirrors/ar/artisan Artisan作为一款专业的咖啡烘焙可视化工具,帮助烘焙师实现从数…

张小明 2026/1/11 7:08:50 网站建设

网站的分类有哪些内容室内设计有哪些网站

树莓派无头部署实战:从零开始远程掌控你的设备 你有没有遇到过这样的场景?手握一块树莓派,却没带显示器、键盘和鼠标,项目又急着上线。插上网线?不行,目标网络只有Wi-Fi。这时候,你能做的难道只…

张小明 2026/1/6 12:22:06 网站建设

中外商贸网站建设哪个企业提供电子商务网站建设外包

卷心菜田里,老陈的菜球个个紧实饱满,排列整齐。“这套水肥系统让我省心不少,”他指着地里的管道说,“不仅菜长得好,管理还特别轻松。”认识卷心菜矮砧密植卷心菜矮砧密植,简单来说就是选用矮生品种&#xf…

张小明 2026/1/9 22:54:13 网站建设

c 网站开发构想扬中企业网站优化哪家好

魔兽争霸3完整优化解决方案:告别卡顿与显示问题的终极指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上的…

张小明 2026/1/7 21:46:02 网站建设

重庆怎么推广企业网站深圳拼团手机网站开发

【C2000系列DSP的Bootloader详解】如何打包源文件为库文件且加密仅授权使用: 如果想要在TI的CCS开发环境中为C2000系列MCU生成lib库文件,并对这些库文件进行加密保护,确保只有授权方(持有密钥)才能调用和使用,以此保护源代码的知识产权。 C2000安全特性在服务器电源上的…

张小明 2026/1/7 18:51:02 网站建设