【【萌新的c语言学习13】】

这篇具有很好参考价值的文章主要介绍了【【萌新的c语言学习13】】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

萌新的c语言学习13

(对于上次c语言文件叙述的小型补充)
后续更新一个总结性质的文案
二进制输入 二进制输出
fread fwrite 二进制输出 文件

struct s
{
    char name[20];
    int age;
    double score;
};


int main()
{
    struct s s = { "张三",20,50.6 };
    FILE* pf = fopen("test.txt", "w");
    if (pf == NULL)
    {
        return 0;
    }
    //二进制形式
    fwrite(&s, sizeof(struct s), 1, pf);
    fclose(pf);
    pf = NULL;
    return 0;
}

为什么这后面是乱码 因为我们是以二进制的形式存进去的

struct s
{
    char name[20];
    int age;
    double score;
};


int main()
{
    struct s tmp = { 0};
    FILE* pf = fopen("test.txt", "rb");
    if (pf == NULL)
    {
        return 0;
    }
    //二进制形式
    fread(&tmp, sizeof(struct s), 1, pf);
    printf("%s %d %lf\n", tmp.name, tmp.age, tmp.score);
    fclose(pf);
    pf = NULL;
    return 0;
}

这样就能读出二进制的数据了

我们来考虑对通讯录的变种的考量
通讯录的内存文件是否也可以再次进行优化
我们写文件是按照顺序读取
那么我们文件其实还有随机读取的用法
fseek
移动文件指针到特定的位置
int fseek(指针, 偏移量, 文件指针的当前位置)
调整指针 在起始位置 偏移多少
关于起始位置有3个选项 seek_cur文件指针的当前位置
seek_end 以文件的末尾位置
seek_set 文件的起始位置
比如说结尾的位置 abcdef那么其实指向的是f后面的位置 我们要想指到e就要偏移-2

int main()
{
    FILE* pf = fopen("test.txt", "r");
    if (pf == NULL)
    {
        return 0;
    }
    //定位文件指针
    fseek(pf,-2,SEEK_END);
    //2.读取文件
    int ch=fgetc(pf);
    printf("%c\n", ch);//打印出了c
    //1.定位文件指针
    //2.读取文件
    fclose(pf);
    pf = NULL;
    return 0;
}

ftell 返回文件指针相对于起始位置的偏移量

int main()
{
    FILE* pf = fopen("test.txt", "r");
    if (pf == NULL)
    {
        return 0;
    }
    //定位文件指针
    fseek(pf,-2,SEEK_END);
    int pos = ftell(pf);
    printf("%d\n", pos);
    //2.读取文件
    int ch=fgetc(pf);
    printf("%c\n", ch);//打印出了c
    //1.定位文件指针
    //2.读取文件
    fclose(pf);
    pf = NULL;
    return 0;
}

rewind 让文件指针的位置回到起始位置

int main()
{
    FILE* pf = fopen("test.txt", "r");
    if (pf == NULL)
    {
        return 0;
    }
    //定位文件指针
    fseek(pf,-2,SEEK_END);
    int pos = ftell(pf);
    printf("%d\n", pos);
    //2.读取文件
    int ch=fgetc(pf);
    printf("%c\n", ch);//打印出了c
    rewind(pf);
    int cd = fgetc(pf);
    printf("%c\n", cd);
    //1.定位文件指针
    //2.读取文件
    fclose(pf);
    pf = NULL;
    return 0;
}

关于文件结束的判定
feof默认下是-1
牢记feof并不是判断是否结束
而是用在这个文件已经结束了 我们通过feof得知文件究竟是为何而结束的
判断是因为读取失败结束 还是遇到文件尾结束
二进制文件读取结束的标志是判断返回值是否小于实际要读取的个数
fgetc当读取失败的时候或者遇到文件结束时都会返回EOF
ferror 是因为遇到错误再结束的
feof 是因为eof而结束的

if ferror(fp)
{
puts("I/o error when reading:)
}

这里他会最后输出I/o error when reading:再加上 错误码文章来源地址https://www.toymoban.com/news/detail-512593.html

到了这里,关于【【萌新的c语言学习13】】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【【萌新的STM32学习-27--USART异步通信配置步骤】】

    USART/UART 异步通信配置步骤 1.配置串口工作参数 HAL_UART_Init() 我们会在此处调用MSP中的回调函数 2.串口底层初始化 用户定义HAL_UART_MspInit() 配置GPIO NVIC CLOCK 等 3.开启串口异步接收中断 HAL_UART_Receive_IT() 4.设置优先级,使能中断 HAL_NVIC_SetPriority() HAL_NVIC_EnableIRQ() 5.编写中断服务函数

    2024年02月10日
    浏览(41)
  • 【【萌新的STM32学习25--- USART寄存器的介绍】】

    STM32–USART寄存器介绍(F1) 控制寄存器1 (CR1) 位13: 使能USART UE 0: USART分频器和输出被禁止 1: USART模块使能 位12 : 配置8个数据位 M 该位定义了数据字的长度,由软件对其设置和清零 0: 一个起始位,8个数据位,n个停止位 1: 一个起始位,9个数据位,n个停止位 有效数

    2024年02月09日
    浏览(54)
  • C语言学习NO.13-字符函数(三)-strncpy,strncat,strncmp长度受限制的字符串函数

    •使用时需要包含头文件string.h • 将源字符串的前num个字符复制到目标。如果源C字符串的末尾在复制num个字符之前找到\\\'\\0\\\',剩下自动记0,直到总共写入了num个字符。 •拷贝num个字符从源字符串到目标空间。 •如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的

    2024年01月24日
    浏览(73)
  • 【【萌新的STM32的学习--非正点原子视频的中断设计思路】】

    我们分析而言 我们对于PA0 的设计就从此而来 对于边沿触发的选择我们已经有所了解了 我们下拉,但是当我们摁下开关的时候 从0到1 导通了 所以这个是下拉 上升沿触发 而对于KEY0 我们摁下是使得电路从原来悬空高阻态到地就是0 所以是下降沿触发 那么对于何种模式有很多人

    2024年02月11日
    浏览(48)
  • 【【萌新的SOC学习之重新起航SOC】】

    ZYNQ PL 部分等价于 Xilinx 7 系列 FPGA PS端:Zynq 实际上是一个以处理器为核心的系统,PL 部分可以看作是它的一个外设。 我们可以通过使用AXI(Advanced eXtensible Interface)接口的方式调用 IP 核,系统通过 AXI 接口将 IP 与处理器连接,也就是实现 PL 与 PS 互联。Zynq-7000 系列的亮点在于它

    2024年02月07日
    浏览(34)
  • 面向萌新的数学建模入门指南

    时间飞逝,我的大一建模生涯也告一段落。感谢建模路上帮助过我的学长和学姐们,滴水之恩当涌泉相报,写下这篇感想,希望可以给学弟学妹们一丝启发,也就完成我的想法了。拙劣的文笔,也不知道写些啥,按顺序随便写写吧。 2023年9月数学建模国赛 数学建模是利用数学

    2024年02月06日
    浏览(43)
  • 【【萌新的STM32-22中断概念的简单补充】】

    我们需要注意的是这句话 从上面可以看出,STM32F1 供给 IO 口使用的中断线只有 16 个,但是 STM32F1 的 IO 口却远远不止 16 个,所以 STM32 把 GPIO 管脚 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F,G)分别对应中断线 0~15。这样子每个中断线对应了最多 9 个 IO 口,以线 0 为例:它对应了GPIOA.0、GPIOB.0、G

    2024年02月11日
    浏览(40)
  • (入门向)面向萌新的算法比赛入门指南

    算法是指解决问题或完成特定任务的一系列明确指令或步骤集合。它是一个定义良好、逐步执行的操作序列,用于将输入转换为输出。算法可用于计算、数据处理、自动化控制、问题解决等各个领域。 算法通常由一系列简单的操作组成,这些操作可以是基本的数学运算、逻辑

    2024年02月07日
    浏览(51)
  • 【【萌新的FPGA学习之Vivado下的仿真入门-2】】

    我们上一章大概了解了 我们所需要进行各项操作的基本框架 对于内部实现其实一知半解 我们先从基本的出发 但从FPGA 了解一下 vivado下的仿真入门 正好帮我把自己的riscV 波形拉一下 行为级仿真 step1: 进入仿真界面:SIMULATION-单击 Run Simulation-单击 Run Behavioral Simulation。 Step2:设

    2024年02月08日
    浏览(42)
  • 6.Go语言学习笔记-结合chatGPT辅助学习Go语言底层原理

    1、Go版本 2、汇编基础 推荐阅读:GO汇编语言简介 推荐阅读:A Quick Guide to Go\\\'s Assembler - The Go Programming Language 精简指令集 数据传输: MOV/LEA 跳转指令: CMP/TEST/JMP/JCC 栈指令: PUSH/POP 函数调用指令: CALL/RET 算术指令: ADD/SUB/MUL/DIV 逻辑指令: AND/OR/XOR/NOT 移位指令: SHL/SHR JCC有条件跳转: JE

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包