前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【C 语言】文件操作 ( 读文本文件 | 文本加密解密 | fgets 函数 | fputs 函数 )

【C 语言】文件操作 ( 读文本文件 | 文本加密解密 | fgets 函数 | fputs 函数 )

作者头像
韩曙亮
发布于 2023-03-29 05:03:12
发布于 2023-03-29 05:03:12
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

一、从文件中读取多行文本


首先 , 以读的方式打开文件 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 打开一个文件 , 以读的方式                              
// r : 使用读的方式打开一个文件 ;                          
FILE *p = fopen("D:\\a.txt", "r");             

然后 , 调用 fgets 方法 , 从文件中读取数据 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char *fgets(char *str, int n, FILE *stream)

char *str 参数 : 将文件中的文本读取到哪里去 ;

int n 参数 : 读取多少数据 , 单位字节 ;

FILE *stream 参数 : 读取哪个文件中的数据 ;

多行文本读取 : 通过 feop 函数判定是否读取到了文件结尾 , 如果已经读取到了文件结尾 , 则返回 true ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int feof(FILE *stream)

完整代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

int main()
{
    // 打开一个文件 , 以读的方式
    // r : 使用读的方式打开一个文件 ;
    FILE *p = fopen("D:\\a.txt", "r");

    // 从命令行中接收字符串的数组
    char s[1024] = {0};
    while (!feof(p))
    {
        memset(s, 0, sizeof(s));
        // 读取文件到 s 数组中
        fgets(s, sizeof(s), p);
        // 打印读取的数据
        printf("%s", s);
    }

    // 关闭文件
    fclose(p);
    printf("Process Exit!");
    return 0;
}

执行结果 :

二、文本文件加密


打开两个文件 , 从一个文件中读取文本 , 进行加密 , 然后再写出到另一个文件中 ;

以读的方式打开文件 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 打开一个文件 , 以读的方式                       
// r : 使用读的方式打开一个文件 ;                   
FILE *p = fopen("D:\\a.txt", "r");      

以写的方式打开文件 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 打开一个文件 , 以写的方式                                                         
// w : 如果文件不存在 , 就创建文件 , 如果文件存在 , 就将该文件覆盖 , 总之写出的是一个新文件 ;                 
FILE *p2 = fopen("D:\\b.txt", "w");                                       

加密文件 : 传入一个字符串指针 , 逐个遍历字符串中的字符 , 只要字符不为 ‘\0’ , 也就是 ASCII 码 0 值 , 就继续遍历 , 循环控制变量 *s 不为 0 即可 ; 加密操作就是将字符自增即可 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void encode(char* s)                         
{                                            
    // 只要字符串的字符 不是 '\0' , 就继续进行遍历            
    while(*s){                               
        // 逐个遍历字符串中的字符                       
        (*s)++;                              
        // 指针自增, 遍历下一个字符                     
        s++;                                 
    }                                        
}                                            

读取文件 : 使用 fgets 方法读取文件中的字符串 , 读取当前位置到 ‘\n’ ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 字符串的数组            
char s[1024] = {0};  

// 读取文件到 s 数组中         
fgets(s, sizeof(s), p);

写出文件 : 调用 fputs 方法 , 将字符串写出到文件中 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 字符串的数组            
char s[1024] = {0};  

// 将读取到的数据写入到 p2 文件中      
fputs(s, p2);             

完整代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

void encode(char* s);

int main()
{
    // 打开一个文件 , 以读的方式
    // r : 使用读的方式打开一个文件 ;
    FILE *p = fopen("D:\\a.txt", "r");

    // 打开一个文件 , 以写的方式
    // w : 如果文件不存在 , 就创建文件 , 如果文件存在 , 就将该文件覆盖 , 总之写出的是一个新文件 ;
    FILE *p2 = fopen("D:\\b.txt", "w");

    // 字符串的数组
    char s[1024] = {0};

    while (!feof(p))
    {
        memset(s, 0, sizeof(s));
        // 读取文件到 s 数组中
        fgets(s, sizeof(s), p);

        // 加密操作
        encode(s);

        // 将读取到的数据写入到 p2 文件中
        fputs(s, p2);

        // 打印读取的数据
        printf("%s", s);
    }

    // 关闭文件
    fclose(p);
    fclose(p2);

    printf("Process Exit!");

    return 0;
}

void encode(char* s)
{
    // 只要字符串的字符 不是 '\0' , 就继续进行遍历
    while(*s){
        // 逐个遍历字符串中的字符
        (*s)++;
        // 指针自增, 遍历下一个字符
        s++;
    }
}

执行结果 :

加密后的结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BCDEIfmmp!XpsmeDTEOHjuivc

三、文本文件解密


打开两个文件 , 从一个文件中读取文本 , 进行解密 , 然后再写出到另一个文件中 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>

void encode(char* s);
void decode(char* s);

int main()
{
    // 打开一个文件 , 以读的方式
    // r : 使用读的方式打开一个文件 ;
    FILE *p = fopen("D:\\b.txt", "r");

    // 打开一个文件 , 以写的方式
    // w : 如果文件不存在 , 就创建文件 , 如果文件存在 , 就将该文件覆盖 , 总之写出的是一个新文件 ;
    FILE *p2 = fopen("D:\\c.txt", "w");

    // 字符串的数组
    char s[1024] = {0};

    while (!feof(p))
    {
        memset(s, 0, sizeof(s));
        // 读取文件到 s 数组中
        fgets(s, sizeof(s), p);

        // 解密操作
        decode(s);

        // 将读取到的数据写入到 p2 文件中
        fputs(s, p2);

        // 打印读取的数据
        printf("%s", s);
    }

    // 关闭文件
    fclose(p);
    fclose(p2);

    printf("Process Exit!");

    return 0;
}

void encode(char* s)
{
    // 只要字符串的字符 不是 '\0' , 就继续进行遍历
    while(*s){
        // 逐个遍历字符串中的字符
        (*s)++;
        // 指针自增, 遍历下一个字符
        s++;
    }
}

void decode(char* s)
{
    // 只要字符串的字符 不是 '\0' , 就继续进行遍历
    while(*s){
        // 逐个遍历字符串中的字符
        (*s)--;
        // 指针自增, 遍历下一个字符
        s++;
    }
}

运行结果 :

将 b.txt 中的文件进行解密 ;

解密过程 :

解密结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ABCD
Hello World
CSDN
Github
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
国家信息中心数据恢复中心官网_stn源源
写在前面:目前在学习pytorch官方文档的内容,以此来记录自己的学习过程,本次学习的是STN网络。 传送门:官方文档 中文翻译 STN论文链接(Spatial Transformer Networks ) 为什么要用到STN网络呢: 卷积神经网络定义了一个异常强大的模型类,但在计算和参数有效的方式下仍然受限于对输入数据的空间不变性。在此引入了一个新的可学模块,空间变换网络,它显式地允许在网络中对数据进行空间变换操作。这个可微的模块可以插入到现有的卷积架构中,使神经网络能够主动地在空间上转换特征映射,在特征映射本身上有条件,而不需要对优化过程进行额外的训练监督或修改。我们展示了空间变形的使用结果,在模型中学习了平移、缩放、旋转和更一般的扭曲,结果在几个基准上得到了很好的效果。
全栈程序员站长
2022/11/10
7650
国家信息中心数据恢复中心官网_stn源源
Pytorch基础 | eval()的用法比较
model.train()的作用是启用 Batch Normalization 和 Dropout。
公众号机器学习与AI生成创作
2021/04/30
10.1K0
Pytorch基础 | eval()的用法比较
PyTorch中神经网络的对抗性攻击和防御
深度学习和神经网络的兴起为现代社会带来了各种机会和应用,例如对象检测和文本转语音。然而,尽管看似准确性很高,但神经网络(以及几乎所有机器学习模型)实际上都可能受到数据(即对抗性示例)的困扰,而这些数据是从原始训练样本中进行的非常轻微的操纵。实际上,过去的研究表明,只要您知道更改数据的“正确”方法,就可以迫使您的网络在数据上表现不佳,而这些数据在肉眼看来似乎并没有什么不同!这些对数据进行有意操纵以降低模型精度的方法称为对抗性攻击,而攻击与防御之战是机器学习领域中持续流行的研究主题。
代码医生工作室
2020/09/14
2.1K0
【深度学习入门篇 ④ 】Pytorch实现手写数字识别
通过前面的学习,我们已经掌握了PyTorch API的基本使用,今天我们使用PyTorch实现手写数字识别案例!
@小森
2024/07/25
2860
【深度学习入门篇 ④ 】Pytorch实现手写数字识别
听,是梯度的声音!用听觉监控神经网络训练,边听音乐边炼丹
训练神经网络是个极为枯燥的工作。与其盯着Learning Curves发呆,或许可以调动一下其他感官,一起做点更有意思的事情。
大数据文摘
2019/08/08
5470
听,是梯度的声音!用听觉监控神经网络训练,边听音乐边炼丹
手撕CNN的MNIST手写数字识别
废话不多说直接上代码,这次研究了一下pytorch中的二维卷积的函数,所以人为的改了一下代码,毕竟一直模仿是行不通的,就和修车一样,你得拆了之后再组装起来才能说明你good at修车。
Tom2Code
2023/02/14
4890
手撕CNN的MNIST手写数字识别
STN:空间变换网络(Spatial Transformer Network)「建议收藏」
卷积神经网络定义了一个异常强大的模型类,但在计算和参数有效的方式下仍然受限于对输入数据的空间不变性。在此引入了一个新的可学模块,空间变换网络,它显式地允许在网络中对数据进行空间变换操作。这个可微的模块可以插入到现有的卷积架构中,使神经网络能够主动地在空间上转换特征映射,在特征映射本身上有条件,而不需要对优化过程进行额外的训练监督或修改。我们展示了空间变形的使用结果,在模型中学习了平移、缩放、旋转和更一般的扭曲,结果在几个基准上得到了很好的效果。
全栈程序员站长
2022/11/19
1.6K0
STN:空间变换网络(Spatial Transformer Network)「建议收藏」
用PyTorch实现MNIST手写数字识别(非常详细)
MNIST可以说是机器学习入门的hello word了!导师一般第一个就让你研究MNIST,研究透了,也算基本入门了。好的,今天就来扯一扯学一学。
小锋学长生活大爆炸
2020/08/13
2K0
用PyTorch实现MNIST手写数字识别(非常详细)
是选择Keras还是PyTorch开始你的深度学习之旅呢?
原文:https://medium.com/@karan_jakhar/keras-vs-pytorch-dilemma-dc434e5b5ae0
kbsc13
2020/05/22
5670
libtorch系列教程3:优雅地训练MNIST分类模型
在这篇文章中,我们对如何使用Libtorch进行MNIST分类模型的训练和测试进行详细描述。首先会浏览官方MNIST示例,然后对其进行模块化重构,为后续别的模型的训练提供 codebase。
王云峰
2023/10/23
5590
从原始图片数据开始构建卷积神经网络(Pytorch)
说在前面入门机器学习的时候,我们往往使用的是框架自带的数据集来进行学习的,这样其实跳过了机器学习最重要的步骤,数据预处理,本文通过从原始数据(图片格式)到卷积神经网络的设计,逐步实现 MNIST 的分类本文使用的是 Facebook 的深度学习框架 PytorchMNIST 数据集是机器学习界的 HelloWorld ,主要是手写字符(0-9)数据下载:后台回复 MNIST 获取下载链接# 导入所需要的包 import torch # 1.1.0 版本 from torchvision import dat
机器视觉CV
2019/07/17
8760
Pytorch打怪路(二)pytorch进行mnist训练和测试
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Teeyohuang/article/details/79242946
TeeyoHuang
2019/05/25
1.9K0
Pytorch实现STN
import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import torchvision from torchvision import datasets, transforms import matplotlib.pyplot as plt import numpy as np class TPSNet(nn.Module): def __init__(self): super(TPSNet, self).__init__() self.conv1 = nn.Conv2d(1, 10, kernel_size=5) self.conv2 = nn.Conv2d(10, 20, kernel_size=5) self.conv2_drop = nn.Dropout2d() self.fc1 = nn.Linear(320, 50) self.fc2 = nn.Linear(50, 10) # Spatial transformer localization-network self.localization = nn.Sequential( nn.Conv2d(in_channels=1, out_channels=8, kernel_size=7), nn.MaxPool2d(kernel_size=2, stride=2), nn.ReLU(True), nn.Conv2d(in_channels=8, out_channels=10, kernel_size=5), nn.MaxPool2d(kernel_size=2, stride=2), nn.ReLU(True) ) # Regressor for the 3 * 2 affine matrix self.fc_loc = nn.Sequential( nn.Linear(10 * 3 * 3, 32), nn.ReLU(True), nn.Linear(32, 3 * 2) ) # Initialize the weights/bias with identity transformation self.fc_loc[2].weight.data.fill_(0) self.fc_loc[2].bias.data = torch.FloatTensor([1, 0, 0, 0, 1, 0]) # Spatial transformer network forward function def stn(self, x): #x是[b,1,28,28] xs = self.localization(x) #xs是[b,10,3,3] xs = xs.view(-1, 10 * 3 * 3) #xs是[b,90] theta = self.fc_loc(xs) #theta是[b,6] theta = theta.view(-1, 2, 3) grid = F.affine_grid(theta, x.size()) x = F.grid_sample(x, grid) #x是[b,1,28,28] return x def forward(self, x): # transform the input #x是[b,1,28,28] x = self.stn(x) #x是[b,1,28,28] # Perform the usual forward pass x = F.relu(F.max_pool2d(self.conv1(x), 2)) x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2)) x = x.view(-1, 320) x = F.relu(self.fc1(x)) x = F.dropout(x, training=self.training) x = self.fc2(x) return F.log_softmax(x, dim=1) def train(epoch): model.train() for batch_idx, (data, target) in enumerate(train_loader): if use_cuda: data, target = data.cuda(), target.cuda() optimizer.zero_grad() output = model(data) loss = F.nll_loss(output, target) #和TPSNet中的log_softmax搭配,就是CE loss loss.backward() optimizer.step() if batch_idx
全栈程序员站长
2022/11/02
4400
Pytorch实现STN
PyTorch 系列教程之空间变换器网络
在本教程中,您将学习如何使用称为空间变换器网络的视觉注意机制来扩充您的网络。你可以在DeepMind paper 阅读更多有关空间变换器网络的内容。
磐创AI
2019/09/24
7060
PyTorch 系列教程之空间变换器网络
教程 | PyTorch经验指南:技巧与陷阱
项目地址:https://github.com/Kaixhin/grokking-pytorch
机器之心
2018/08/07
1.5K0
教程 | PyTorch经验指南:技巧与陷阱
【colab pytorch】使用tensorboard可视化
import datetime import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torch.utils.data import Dataset, DataLoader from torchvision import transforms, utils, datasets from tensorflow import summary %load_ext t
西西嘛呦
2020/08/26
1K0
【colab pytorch】使用tensorboard可视化
PyTorch深度学习(2)
Deep Learning = Learning Hierarchical Representations 深度学习即学习层次的表征。
何武凡
2023/03/09
3700
PyTorch深度学习(2)
PyTorch Lightning工具学习
【GiantPandaCV导语】Pytorch Lightning是在Pytorch基础上进行封装的库(可以理解为keras之于tensorflow),为了让用户能够脱离PyTorch一些繁琐的细节,专注于核心代码的构建,提供了许多实用工具,可以让实验更加高效。本文将介绍安装方法、设计逻辑、转化的例子等内容。
BBuf
2020/12/09
1.6K0
PyTorch Lightning工具学习
stn  pytorch[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/02
2660
从原始图片数据开始构建卷积神经网络(Pytorch)
入门机器学习的时候,我们往往使用的是框架自带的数据集来进行学习的,这样其实跳过了机器学习最重要的步骤,数据预处理,本文通过从原始数据(图片格式)到卷积神经网络的设计,逐步实现 MNIST 的分类
机器视觉CV
2019/07/12
8270
推荐阅读
相关推荐
国家信息中心数据恢复中心官网_stn源源
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文