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中执行运算,并把结果存储进另一个文件中。
结果如下: