程序设计进阶——C语言(翁凯版)第七周

7.1 文件

7.1.1 格式化输入输出

格式化的输入输出

  • printf
  • %[flags][width][.prec][hIL]type
  • scanf
  • %[flag]type

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
printf和scanf都是有返回值的,printf返回读入的项目数,scanf返回输出的字符数,在要求严格的程序中,应该判断每次调用scanf或printf的返回值,从而了解程序运行中是否存在问题。

7.1.2 文件输入输出

文件输入输出

  • 用<和>做重定向;

FILE

  • FILE* fopen(const char *restrict path,const char *restrict mode);
  • int fclose(FILE *stream);
  • fscanf(FILE*,…);
  • fprintf(FILE*,…);

打开文件的标准代码

FILE* fp=fopen("file","r");
if(fp){fscanf(fp,...);fclose(fp);
}else{...
}

在这里插入图片描述

7.1.3 二进制文件

二进制文件

  • 其实所有的文件最终都是二进制的;
  • 文本文件无非是用最简单的方式可以读写的文件;
  • more、tail;
  • cat;
  • vi;
  • 而二进制文件是需要专门的程序来读写的文件;
  • 文本文件的输入输出是格式化,可能经过转码;

文本和二进制相比,文本优势在于方便人类读写并且跨平台;缺点是程序输入输出需要经过格式化,开销大;二进制缺点是人类读写困难,不跨平台,比如int的大小不一致,大小端的问题等;优点是程序读写快。

程序为什么要文件

  • 配置;
  • Unix用文本,Windows用注册表;
  • 数据;
  • 稍微有点量的数据都放数据库了;
  • 媒体;
  • 这个只能是二进制的;
  • 现实是,程序通过第三方库来读写文件,很少直接读写二进制文件了。

二进制读写

  • size_t fread(void *restrict ptr,size_t size,size_t nitems,FILE *restrict stream);
  • size_t fwrite(const void *restrict ptr,size_t size,size_t nitems,FILE *restrict stream);
  • 注意FILE指针是最后一个参数;
  • 返回的是成功读写的字节数;

在文件中定位

  • long ftell(FILE *stream);
  • int fseek(FILE *stream,long offset,int whence);
  • SEEK_SET:从头开始;
  • SEEK_CUR:从当前位置开始;
  • SEEK_END :从尾开始(倒过来);

可移植性

  • 这样的二进制文件不具有可移植性;
  • 在int为32位的机器上写成的数据文件无法直接在int为64位的机器上正确读出;
  • 解决方案之一是放弃使用int,而是typedef具有明确大小的类型;
  • 更好的方案是用文本。

7.2 位运算

7.2.1 按位运算

按位运算
C有这些按位运算的运算符

  • & 按位的与;
  • |按位的或;
  • ~按位取反;
  • ^按位的异或;
  • <<左移,>>右移;

按位与&
在这里插入图片描述
按位或|
在这里插入图片描述
按位取反~
在这里插入图片描述
逻辑运算VS按位运算
在这里插入图片描述
按位异或
在这里插入图片描述

7.2.2 移位运算

左移<<
在这里插入图片描述
右移>>
在这里插入图片描述
移位的位数不要用负数,这是没有定义的行为!

7.2.3 位运算例子

输出一个数的二进制

代码如下

#include <stdio.h>int main(int argc,char const argv[])
{int number;number=12345;unsigned mask=1u<<31;for(;mask;mask>>=1){printf("%d",number&mask?1:0);}printf("\n");return 0;
}

输出

00000000000000000011000000111001

位运算在单片机编程中的应用
在这里插入图片描述

7.2.4 位段

  • 把一个int的若干位组合成一个结构;
struct{unsigned int leading:3;unsigned int FLAG1:1;unsigned int FLAG2:1;int trailing:11;
};

代码如下

#include <stdio.h>void prtBin(unsigned int number);struct U0{unsigned int leading:3;unsigned int FLAG1:1;unsigned int FLAG2:1;int trailing:27;
};int main(int argc,char const argv[])
{struct U0 uu;uu.leading=2;uu.FLAG1=0;uu.FLAG2=1;uu.trailing=0;printf("sizeof(uu)=%lu\n",sizeof(uu));prtBin(*(int*)&uu);return 0;
}void prtBin(unsigned int number)
{unsigned mask=1u<<31;for(;mask;mask>>=1){printf("%d",number&mask?1:0);}printf("\n");
}

输出

sizeof(uu)=4
00000000000000000000000000010010

位段

  • 可以直接用位段的成员名称来访问;
  • 比移位、与、或还方便;
  • 编译器会安排其中的位的排列,不具有可移植性;
  • 当所需的位超过一个int时会采用多个int;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/459946.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全名词解析-数据安全、敏感个人信息、数据分级分类

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 数据安全02 敏感个人信息03 数据分级分类 01 数据安全 数据&#xff0c;是指任何以电子或者其他方式对信息的记录。数据处理&#xff0c;包括数据的收集、存储、使用、加工、传输、提供、公开等。 …

3.3-媒资管理之MinIo分布式文件系统上传视频

文章目录 媒资管理5 上传视频5.1 需求分析5.2 断点续传技术5.2.1 什么是断点续传5.2.2 分块与合并测试5.2.3 视频上传流程5.2.4 minio合并文件测试 5.3 接口定义5.4 上传分块开发5.4.1 DAO开发5.4.2 Service开发5.4.2.1 检查文件和分块5.4.2.2 上传分块5.4.2.3 上传分块测试 5.…

Flink Checkpoint过程

Checkpoint 使用了 Chandy-Lamport 算法 流程 1. 正常流式处理&#xff08;尚未Checkpoint&#xff09; 如下图&#xff0c;Topic 有两个分区&#xff0c;并行度也为 2&#xff0c;根据奇偶数 我们假设任务从 Kafka 的某个 Topic 中读取数据&#xff0c;该Topic 有 2 个 Pa…

猫头虎分享已解决Bug || docker: Error response from daemon: network not found

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

cleanmymacX和腾讯柠檬哪个好用

很多小伙伴在使用Mac时&#xff0c;会遇到硬盘空间不足的情况。遇到这种情况&#xff0c;我们能做的就是清理掉一些不需要的软件或者一些占用磁盘空间较大的文件来腾出空间。我们可以借助一些专门的清理工具&#xff0c;本文中我们来推荐几款好用的Mac知名的清理软件。并且将Cl…

【已解决】:pip is configured with locations that require TLS/SSL

在使用pip进行软件包安装的时候出现问题&#xff1a; WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 解决&#xff1a; mkdir -p ~/.pip vim ~/.pip/pip.conf然后输入内容&#xff1a; [global] ind…

如何构建一个高效的微服务治理闭环管理体系

随着企业业务的快速发展和数字化转型的推进&#xff0c;微服务架构因其高度的灵活性、可扩展性和可维护性而逐渐成为主流。然而&#xff0c;微服务架构的复杂性也带来了诸多治理挑战。为了有效应对这些挑战&#xff0c;构建一个微服务治理闭环至关重要。 1、微服务治理概述 微…

ubuntu20安装mongodb

方法一&#xff1a;直接安装(命令是直接从mongo官网Install MongoDB Community Edition on Ubuntu — MongoDB Manual复制的&#xff09; cat /etc/lsb-release sudo apt-get install -y gnupg curl curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \sudo gp…

使用ChatGpt和文心一言辅助文章创作

近期在写数字水浒系列文章&#xff0c;使用了ChatGpt和文心一言进行辅助创作&#xff0c;整体感受不错&#xff0c;提高了工作效率。 在使用过程中&#xff0c;感觉文心的中文能力更强一些&#xff0c;主要体现在&#xff1a; 1 语料库更大&#xff0c;比如对水浒传了解的更多…

Vulnhub-Empire靶机-详细打靶流程

渗透思路 1.确认靶机IP地址2.端口服务扫描3.敏感目录扫描4.ffuf命令在这个目录下&#xff0c;继续使用ffuf工具扫描 5.ssh私钥爆破1.将私钥写进sh.txt中2.将私钥转换为可以被john爆破的形式3.通过John爆破 6.ssh私钥登陆7.icex64提权8.arsene提权 1.确认靶机IP地址 ┌──(roo…

vFavorites

快速访问资产和文件夹的快捷方式 将您最常用的项目放入vFavorites中&#xff0c;以便立即访问 vFavorites中的项目与项目选项卡中的常规项目类似&#xff1a; - 单击文件夹以打开它 - 单击资产以选择它 - 双击脚本以进行编辑 - 拖放材料或预制件以将其添加到场景中 下载&#…

MYSQL存储过程(含入参、出参)

1、创建库存表语句 -- eladmin.t_stock definitionCREATE TABLE t_stock (id bigint(20) NOT NULL AUTO_INCREMENT,quantity bigint(20) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4101 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin; id为主键&#xff0c;便于…