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

C语言学习笔记 Day15(文件管理--下)

Day15 内容梳理:

目录

C语言学习笔记 Day14(文件管理--上)-CSDN博客

Chapter 10  文件操作

10.2 文件加密、解密

(1)文件加密

(2)文件解密

10.3 文件读取、写入

(1)逐字符读取文件

(2)逐字符写入文件

(3)逐行读取文件

(4)逐行写入文件

10.4 技能应用(文件写入+随机数)


Chapter 10  文件操作

10.2 文件加密、解密

(1)文件加密

先在D盘手动创建了名为"解密1"的文件,写入了“这是一句话。”

结果如下,左侧是原始文件,右侧是加密后的文件

(2)文件解密

继续用上面通过ch++加密过的文件,这次解密文件只需要while循环中让ch--。

结果如下,从“解密1”到“加密1”,再到“解密2”,完成了转换。

10.3 文件读取、写入

(1)逐字符读取文件

判断是否到文件结尾的函数:feof(文件指针)

适用范围:文本文件和二进制文件都可

使用方式:没有到文件结尾则返回0,到文件结尾则返回非零值,因此这么用while( ! feof(fp) ){}

(2)逐字符写入文件

在字符串中遇到\n不会终止读写,而是换行,但是遇到\0则会终止读写。

无论是哪种情况,代码整体没有改动。(只有字符串中发生了\n或\0等改动)

情况1:文本没有\n也没有\0的情况:

原文件:                                                             写入后的文件:

情况2:文本有\n的情况,会换行

 原文件:                                                             写入后的文件:

情况3:文本有\0的情况,会只写入\0以前的内容

 原文件:                                                             写入后的文件:

 

(3)逐行读取文件

(4)逐行写入文件

注意需要导入string库(代码为#include<string.h>)

需要特别注意的有两点。

①代码scanf("%[^\n]",p);的作用:

 是吞噬输入字符串中的\n,也就是不把回车以文本的形式(\n)存入文本文件中。但是考虑到我们仍需要回车来分割字段,所以加了strcat(p,”\n”);来追加回车。

②if( !strcmp(p, “comm=exit”))中加了个“!”:

因为strcmp()的作用是接收两个参数并比较,返回值为0则代表两个值相同。但放回代码看也就是if(0),无法进入条件,所以在strcmp()前加了“!”符号,相当于如果符合条件,就是if(1)。

运行代码后,直接在弹出的调试控制台中输入文本。输入什么都行,我这里输入的是hello world的代码。

得到:

10.4 技能应用(文件写入+随机数)

随机生成四则运算题目。

需要用到:文件写入、随机数种子、枚举类(枚举出加减乘除的符号)

分两步进行,一步是随机生成题目,另一步是运算出这些随机式的答案。

第一步,生成四则运算题目

srand()是stdlib库的,time是time库的,需要在代码的最开头写:

#include<stdlib.h>

#include<time.h>

这里用sprintf()而非printf(),是因为sprintf()可以把内容按格式排列。后续计算四则运算结果所用到的sscanf()也是同理。

结果如下,每运行一次代码,文本内容都会被随机生成的新内容覆盖。

第二步,读取式子并在另一个文本文件中生成式子+答案

首先利用while循环和判断是否到文本末尾的feof()来逐行读取,再利用sscanf()按一定格式取得num1、符号、num2.通过switch判断符号是哪个之后,在对应的case中执行运算,并把结果存储进另一个文件中。

结果如下:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 多态,匿名内部类(lambda表达式),集合
  • 【Tools】如何评价黑悟空这款游戏
  • Python中的集合魔法:解锁高效数据处理的秘密
  • 无法连接Redis服务问题排查
  • 云计算实训36——mysql镜像管理、同步容器和宿主机时间、在容器外执行容器内命令、容器的ip地址不稳定问题、基础镜像的制作、镜像应用
  • Question mutiple pdf‘s using openai, pinecone, langchain
  • 新160个crackme - 045-CyTom-crackme
  • 如何用GPT进行编程辅助?
  • MyBatis 源码解析:DefaultSqlSessionFactory 的创建与管理
  • 基于QT与STM32的电力参数采集系统(华为云IOT)(211)
  • 面试经验分享 | 华为安全面试--年薪50万offer
  • MySQL中的分组统计
  • 记一次ssh伪终端修改为shell
  • 案例-KVM高级功能部署(虚拟化技术实战)
  • nuxt3连接mongodb操作
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 78. Subsets
  • Angular2开发踩坑系列-生产环境编译
  • docker容器内的网络抓包
  • DOM的那些事
  • Golang-长连接-状态推送
  • Java Agent 学习笔记
  • JAVA并发编程--1.基础概念
  • Python_网络编程
  • spring boot下thymeleaf全局静态变量配置
  • Spring-boot 启动时碰到的错误
  • Tornado学习笔记(1)
  • yii2权限控制rbac之rule详细讲解
  • 从输入URL到页面加载发生了什么
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 区块链共识机制优缺点对比都是什么
  • 实现简单的正则表达式引擎
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • postgresql行列转换函数
  • 大数据全解:定义、价值及挑战
  • ​如何使用QGIS制作三维建筑
  • #1014 : Trie树
  • #stm32驱动外设模块总结w5500模块
  • $refs 、$nextTic、动态组件、name的使用
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2020)Java后端开发----(面试题和笔试题)
  • (27)4.8 习题课
  • (7)摄像机和云台
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (离散数学)逻辑连接词
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十六)串口UART
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .DFS.
  • .NET 8.0 发布到 IIS
  • .NET MVC 验证码
  • .NET 给NuGet包添加Readme
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 事件模型教程(二)