C语言之输入输出和字符(2)

目录

缓冲和重定向

▇缓冲

▇重定向

字符

转义字符

\'和\"……字符'和字符"

字符串字面量的写法

字符常量的写法

 八进制转义字符和十六进制转义字符

字符编码


在看本节之前,请先看下上一章,做到更好地衔接。https://blog.csdn.net/W06164932/article/details/135137651?spm=1001.2014.3001.5501


缓冲和重定向

▇缓冲

在上一节学习的代码中,并不是每读入一个字符就马上输出,而是在按下回车键后一起输出。

C语言的输入输出一般会将读入的字符以及待输出的字符暂时保存在缓存中,当达到下列条件时才进行实际的输入输出操作。

A. 缓存已满(全缓冲)

B. 输入换行符(行缓冲)

C. 立即输出(无缓冲)

▇重定向

如下所示,给定输入输出文件名(假设运行文件名的名称称为list0808)并运行

list0808<输入文件名>输出文件名(回车键)

 输入文件的数据就会复制到输出文件中去,但这并不是由C语言实现的,而是由UNIX和MS-DOS等操作系统的重定向功能来实现的。


字符

C语言中的字符都作为非负整数来处理,所以每一个字符都有与之对应的编码(即整数值)。

但是,即使是同一个字符,在不同的运行环境中编码也会有所不同,具体要看程序运行环境所用的字符编码。

让我们来看下ASCII表,以它为说明:

字符‘g’位于第六列第七排,那么它的字符编码就是十六进制的67,同理字符‘A’的字符编码就是十六进制的41,那么将字符‘0’——字符‘9’分别用十六进制和十进制数来表示,如下:(可不是乘号哦)

字符十六进制数十进制数
‘0’0×3048
‘1’0×3149
’2‘0×3250
……
’9‘0×3957

知道了字符‘0’——‘9’的值,那么stitch语句就可以写成下面这样(请看上一章)

	switch(ch){case 48:cnt[0]++; break;break;case 49:cnt[1]++; break;	break;case 50:cnt[2]++; break;break;/*略*/case '57':cnt[9]++; break;break;}

这样我们就能得出一些规律:数字字符ch的值减去48就是对应数组cnt下表0—9的值,根据这个规律我们可以对这个Switch语句进行更改是它更加简化:

if(ch >= 48 && ch <= 57)cnt[ch - 48]++

但是上面的两个程序有个缺点,就是可移植性低,为什么可移植性低呢?

在谈论这些字符时都是基于ASCII码展开的,但是在别的编码表中字符‘0’的值就不一定是48.

不过幸运的是,C语言的运行环境都遵循下面规则:

数字字符‘0’—‘9’都是递增的,虽然‘0’的值根据字符编码各有不同,但是无论哪种环境,‘5’只会比‘0’大5,即‘5’-‘0’的值一定是5.

任意的字符减去‘0’,都能得到所需要的下标值(这个计算方法还是挺重要的,大家一定要掌握哦!),因此可以将上面的if语句改写如下:

	if(ch >= '0' && ch <= '9')cnt[ch - '0']++;

我们通过下面的程序来看看EOF和各个数字字符的值:

#include<stdio.h>int main()
{int i;printf("EOF = %d\n", EOF);for(i = 0; i < 10; i++)printf("%d = %d\n", i, '0' + i);return 0;
}

转义字符

先找到上面ASCII表中的转义字符那一栏,·位于0x07——0x0D的字符是:\a,\b,\t,\n,\v,\f,\r

其中换行的‘\n’,和表示响铃的‘\a’在前面我们早已学习

(图片来自CSDN @code_流苏)

\'和\"……字符'和字符"

引号'和"的转义字符是\'和\",在字符串字面量以及字符串字符常量中使用时,需要注意下面几点:

字符串字面量的写法

字符"必须使用转移字符\"来表示,因此,表示字符串AB"C的字符串字面量就像写成“AB\"C”

字符'既可以使用'也可以使用\'来表示

字符常量的写法

字符"既可以使用"也可以使用\"来表示

字符'必须使用转义字符\'来表示,表示字符'的字符常量为'\"(不可写作‘'’)

 八进制转义字符和十六进制转义字符

以\开头的八进制转义字符和以\x开头的十六进制转义字符,可以用八进制或十六进制的编码任意表示字符。

前者使用1—3位八进制数,后者使用任意数位的十六进制数来表示字符编码

例如在ASCII码中,数字字符‘1’可以用‘\61’或者‘\x31’来表示,不过这种表示方法会降低程序的可移植性,尽量不要使用。


字符编码

C语言规定:

数字字符‘0’—‘9’的值是递增的,但是不能保证下面成立:

大小和小写的英文字母‘A’,‘B’——‘Z’/‘a’,‘b’——‘z’的值是递增的

例如,在大型机普遍使用的EBCDIC码就不遵循这个规则,但是在ASCII和JIS码中成立。

在以后的学习中,我们会将学习到字符串,字符串数组等……不过临近考试,还要做些准备啊,所要更新速度会稍慢。

 

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

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

相关文章

基于vue-cli快速发布vue npm 包

一、编写组件 1. 初始化项目并运行 vue create vue-digital-countnpm run serve2. 组件封装 新建package文件夹 ​ 因为我们可能会封装多个组件&#xff0c;所以在src下面新建一个package文件夹用来存放所有需要上传的组件。 ​ 当然&#xff0c;如果只有一个组件&#xff…

【科普知识】什么是步进驱动器、驱动模式及驱动的方法?

我们已经知道步进电机就是一种将电脉冲信号转化为角位移的执行机构。那么如何精准地控制电机的速度和位置呢&#xff1f;这就需要一种驱动器的装置。 1.什么是步进驱动器&#xff1f; 电机控制原理图 步进驱动器是一种能使步进电机运转的功率放大器&#xff0c;能把控制器发来…

Linux(二)常用命令

文章目录 一、文件管理命令1.1 chmod1.2 chown1.3 cat1.4 cp1.5 find1.6 head1.7 tail1.8 less1.9 more1.10 mv1.11 rm1.12 touch1.13 vim1.14 >和>>1.15 scp1.16 ln1.17 怎么用命令查看日志 二、文档管理命令2.1 grep2.2 wc2.3 echo 三、磁盘管理命令3.1 cd3.2 df3.3…

Observability:捕获 Elastic Agent 和 Elasticsearch 之间的延迟

在现代 IT 基础设施的动态环境中&#xff0c;高效的数据收集和分析至关重要。 Elastic Agent 是 Elastic Stack 的关键组件&#xff0c;通过促进将数据无缝摄取到 Elasticsearch 中&#xff0c;在此过程中发挥着至关重要的作用。 然而&#xff0c;显着影响此过程整体有效性的关…

[CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]

文章目录 前言小结 原文地址&#xff1a;https://blog.csdn.net/qq_45752541/article/details/132854115 前言 mesh 和点是最常见的3D场景表示&#xff0c;因为它们是显式的&#xff0c;非常适合于快速的基于GPU/CUDA的栅格化。相比之下&#xff0c;最近的神经辐射场&#xf…

基于Java+Swing实现大鱼吃小鱼小游戏(含用户登陆、注册功能)

基于JavaSwing实现大鱼吃小鱼小游戏 一、系统实现二、功能展示1.效果演示2.游戏界面3.游戏运行界面4.用户登陆 三、其他系统四源码下载 一、系统实现 1、创建窗口对象Ui 2、背景的绘制 3、键盘的监听事件 4、将己方鱼放上去 5、让小鱼移动 6、其他的鱼并引导&#xff08;先创建…

用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成

一、插件 Settings... 1.1 File -- Settings 1.2 Settings -- Plugins 1.2.1 搜索框&#xff0c;也可以直接搜索 1.3 Plugins -- 【输入 & 搜索】mybatis 1.3.1 插件不同功能介绍 1.3.2 翻译如下 1.4 选中 Update&#xff0c;更新下 1.4.1 更新中 1.4.2 Restart IDE 1…

前端vue keyframes动画

8.1.2 keyframes动画 transition动画适合用来创建简单的过渡效果。CSS3中支持使用animation属性来配置更加复杂的动画效果。animation属性根据keyframes配置来执行基于关键帧的动画效果。新建一个名为keyframes.vue的测试文件。编写如下代码&#xff1a; <template><…

连获4大奖项,欧科云链成Web3行业领跑者

2023年底&#xff0c;作为深耕区块链大数据且持续关注监管与合规科技的Web3企业&#xff0c;欧科云链连续斩获4大奖项&#xff0c;包括第十三届中国证券金紫荆奖、财联社“最具创新价值奖” 、界面新闻“优致雇主奖”与“好公司50”&#xff0c;成为中国Web3领域中最受关注的企…

利用Matplotlib画简单的线形图

实验题目&#xff1a;简单的线形图 实验目的&#xff1a;利用Matplotlib画简单的线形图 实验环境&#xff1a;海豚大数据和人工智能实验室&#xff0c;使用的Python库 名称 版本 简介 numpy 1.16.0 线性代数 Pandas 0.25.0 数据分析 Matplotlib 3.1.0 数据可视化 …

「工业遥测」图表控件LightningChart在水工业中的应用

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

实在智能成功完成近2亿元C轮融资,全面迎接2024年Agent智能体应用元年

在这个最冷的季节&#xff0c;杭州实在智能科技有限公司&#xff08;以下简称“实在智能”&#xff09;依然表现火爆&#xff0c;近日&#xff0c;实在智能成功完成C轮融资近2亿元人民币&#xff0c;由金泰富资本和安吉智慧谷共同领投、安吉两山国创跟投。 在此轮融资以前&…

Kubernetes pod ip 暴露

1. k8s pod 和 service 网络暴露 借助 iptables 的路由转发功能&#xff0c;打通k8s集群内的pod和service网络&#xff0c;与外部网络联通 # 查看集群的 pod 网段和 service 网段 kubectl -n kube-system describe cm kubeadm-config networking:dnsDomain: cluster.localpod…

Gazebo GUI模型编辑器

模型编辑器 现在我们将构建我们的简单机器人。我们将制作一个轮式车辆&#xff0c;并添加一个传感器&#xff0c;使我们能够让机器人跟随一个斑点&#xff08;人&#xff09;。 模型编辑器允许我们直接在图形用户界面 &#xff08;GUI&#xff09; 中构建简单的模型。对于更复…

NCV8460ADR2G在汽车和工业应用中高压侧驱动如何破?

NCV8460ADR2G是一款完全保护的高压侧驱动器&#xff0c;可用于开关各种负载&#xff0c;如灯泡、电磁阀和其他致动器。该器件可以通过有源电流限制和高温关断针对过载情况进行内部保护。 诊断状态输出引脚提供了高温以及开关状态开路负载情况的数字故障指示。 特性&#xff1a;…

Leetcod面试经典150题刷题记录 —— 矩阵篇

矩阵篇 1. 有效的数独2. 螺旋矩阵Python 3. 旋转图像Python额外开辟数组空间原地置换法 4. 矩阵置零5. 生命游戏Python 1. 有效的数独 题目链接&#xff1a;有效的数独 - leetcode 题目描述&#xff1a; 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验…

Android的组件、布局学习

介绍 公司组织架构调整&#xff0c;项目组需要承接其他项目组的android项目&#xff0c;负责维护和开发新需求&#xff0c;故学习下基础语法和项目开发。 组件学习 Toolbarheader布局部分 就是app最顶部的部分 他的显示与否&#xff0c;是与F:\androidProject\android_lear…

FPGA模块——以太网(1)MDIO读写

FPGA模块——以太网MDIO读写 MDIO接口介绍MDIO接口代码&#xff08;1&#xff09;MDIO接口驱动代码&#xff08;2&#xff09;使用MDIO驱动的代码 MDIO接口介绍 MDIO是串行管理接口。MAC 和 PHY 芯片有一个配置接口&#xff0c;即 MDIO 接口&#xff0c;可以配置 PHY 芯片的工…

在Portainer创建Nginx容器并部署Web静态站点实现公网访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

Android: Ubuntu下交叉环境编译常用调试工具demo for lspci命令(ARM设备)

lspci命令交叉环境编译(ARM设备) 交叉编译工具下载&#xff1a; https://releases.linaro.org/components/toolchain/binaries https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/ lspci命令交叉环境编译(ARM设备)&#xff1a; 1&a…