IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 从零开始 学习C/C++的第二十二天 文件读写 -> 正文阅读

[C++知识库]从零开始 学习C/C++的第二十二天 文件读写

11.30

枚举:enum

? ? 枚举是一种数据类型,把可能出现的值一一罗列出来,并给其起有意义的名字,如果给该类型的变量赋其它的数值则认为是非法的(愿望)

? ?

? ? enum 枚举名

? ? {

? ? ? ? 成员名=val,

? ? ? ? ...

? ? };

? ? 枚举可以看做是一种值受限的int类型,但是c编译器为了效率并不检查,所以C语言中枚举可以当做int类型变量一样使用(锦上添花)

? ? 如果不给成员值,枚举成员的值默认从0开始,依次+1,如果中间某个成员设置了值,后面的成员在它的基础上依次+1

? ? 为什么要使用枚举:

? ? ? ? 可以给无意义的数值起有意义的名字,可以提高代码的可读性,比宏常量相对安全一些

文件IO:

? ?

? ? 文件的分类:

? ? ? ? 文本文件: ? ? ?人能看得懂的文件,存储的是ASCII码的二进制 ? ?'2''5''5' '2' -> 50的二进制

? ? ? ? 二进制文件: ? ?存储的是数据的二进制 ? ?255

? ?

? ? FILE *fopen(const char *pathname, const char *mode);

? ? 功能:打开或创建文件

? ? path:文件的路径

? ? mode:打开模式

? ? ? ? r ? ? ? 以只读权限打开文件,如果不存在则打开失败

? ? ? ? r+ ? ? ?在r的基础上增加写权限

? ? ? ? w ? ? ? 以只写权限打开文件,如果不存在则新建,如果文件已存在则清空打开

? ? ? ? w+ ? ? ?在w的基础上增加读权限

? ? ? ? a ? ? ? 以只写权限打开文件,如果不存在则新建,如果文件已存在则新写入的数据在文件的末尾

? ? ? ? a+ ? ? ?在a的基础上增加读权限

? ? ? ? 注意:以上六种模式都是以文本模式操作文件,在它们的基础上后面加b表示以二进制方式操作文件

? ? 返回值:结构指针,不需要关心它的成员,只需要知道它是操作文件的凭证即可

? ? 二进制方式读写:

? ? size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

? ? 功能:把内存中的数据写入文件中

? ? ptr:要写入的内存的首地址

? ? size:一次要写多少个字节

? ? nmemb:要写入多少次

? ? stream:文件指针,要写入的文件,fopen的返回值

? ? 返回值:成功写入的字节数

? ? size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

? ? 功能:从文件中读取数据到内存

? ? ptr:内存首地址

? ? size:一次读取多少个字节

? ? nmemb:读取多少次

? ? stream:文件指针,fopen的返回值

? ? 返回值:成功读取的次数

? ? 练习1:定义一个教师结构体变量并初始化,把该变量的值以二进制方式写入到文件中

#include <stdio.h>
#include <string.h>
#include "test1.h"

int main(int argc,const char* argv[])
{
?? ?Teacher tch = {"zhu",'m',18,18110602};
?? ?FILE* fwp = fopen("test.txt","w");
?? ?if (fwp == NULL)
?? ?{
?? ??? ?perror("fopen");
?? ??? ?return -1;
?? ?}
?? ?fwrite(&tch,1,sizeof(tch),fwp);
}

? ? 练习2:从文件中读取教师结构变量并显示

#include <stdio.h>
#include "test1.h"

int main(int argc,const char* argv[])
{
?? ?FILE* fp = fopen("test.txt","r");
?? ?if (fp == NULL)
?? ?{
?? ??? ?perror("fopen");
?? ??? ?return -1;
?? ?}
?? ?Teacher tch = {};
?? ?fread(&tch,1,255,fp);
?? ?printf ("%s %c %d %d\n",tch.name,tch.sex,tch.age,tch.id);
}

文本方式读写:

? ? int fprintf(FILE *stream, const char *format, ...);

? ? 功能:以文本形式写入数据到文件中

? ? stream:要写入的文件,文件指针

? ? format:"提示信息+占位符"

? ? ...:变量名列表

? ? 返回值:成功写入的字符个数

? ? int fscanf(FILE *stream, const char *format, ...);

? ? 功能:从文件中读取数据到变量中

? ? stream:要读取的文件,文件指针

? ? format:“占位符”

? ? ...:变量地址列表

? ? 返回值:成功读取到的变量个数

? ? 练习3:定义一个教师结构体变量并初始化,把该变量的值以文本方式写入到文件中

#include <stdio.h>
#include "test1.h"

int main(int argc,const char* argv[])
{
?? ?Teacher tch = {"zhu",'m',21,1811};
?? ?FILE* fwp = fopen("test.txt","w");
?? ?if (fwp == NULL)
?? ?{
?? ??? ?perror("fopen");
?? ??? ?return 1;
?? ?}
?? ?fprintf (fwp,"%s %c %d %d\n",tch.name,tch.sex,tch.age,tch.id);
}

? ? 练习4:从文件中以文本形式读取教师结构变量并显示

#include <stdio.h>
#include "test1.h"

int main(int argc,const char* argv[])
{
?? ?Teacher tch = {};
?? ?FILE* frp = fopen("test.txt","r");
?? ?if (frp == NULL)
?? ?{
?? ??? ?perror("fopen");
?? ??? ?return 1;
?? ?}
?? ?fscanf (frp,"%s %c %d %d\n",tch.name,&tch.sex,&tch.age,&tch.id);
?? ?printf ("%s %c %d %d\n",tch.name,tch.sex,tch.age,tch.id);

}

? ? int fclose(FILE *stream);

? ? 功能:关闭文件

文件的随机读写:

? ? 文件位置指针:

? ? ? ? 每个打开的文件都有一个指针记录着读写操作的位置,而且它会随着读写函数的执行而发生移动,以r,r+,w,w+方式打开的文件,位置指针在文件的开头,

? ? ? ? 而以a,a+方式打开的文件,位置指针在文件末尾

? ? ? ? int fseek(FILE *stream, long offset, int whence);

? ? ? ? 功能:设置文件位置指针的位置

? ? ? ? stream:文件指针

? ? ? ? offset:偏移值

? ? ? ? whence:基础位置:

? ? ? ? ? ? SEEK_SET ? ?文件开头

? ? ? ? ? ? SEEK_END ? ?文件末尾

? ? ? ? ? ? SEEK_CUR ? ?当前位置

? ? ? ? 返回值:成功返回0,失败返回-1

? ? ? ? long ftell(FILE *stream)

? ? ? ? 功能:获取文件位置指针的位置

? ? ? ? 返回值:在第几个字节

? ? ? ? void rewind(FILE *stream);

? ? ? ? 功能:把文件位置指针设置到开头

文件相关函数:

? ? char *fgets(char *s, int size, FILE *stream);

? ? 功能:从文件中读取一行字符串

? ?

? ? int fputs(const char *s, FILE *stream)

? ? 功能:写入一个字符串到文件中

? ?

? ? int fputc(int c, FILE *stream);

? ? 功能:写入一个字符到文件中

? ? int fgetc(int c, FILE *stream);

? ? 功能:从文件中读取一个字符

? ? int rename(const char *oldpath, const char *newpath)

? ? 功能:重命名文件

? ? 返回值:成功返回0,失败返回-1

? ? int remove(const char *pathname);

? ? 功能:删除文件

? ? 返回值:成功返回0,失败返回-1 ? ? ?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:31:50  更:2021-12-01 17:34:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/24 13:07:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码