当前位置: 首页 > news >正文

C语言典型例题32

《C程序设计教程(第四版)——谭浩强》


习题2.9 编程序用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符。

(1)变量c1,c2应该定义为字符型或者整型吗?或者二者皆可?

(2)要求输出变量的ASCLL码,应该怎么处理?用putchar函数还是printf()函数?

(3)整型变量与字符变量是否在涉河情况下都可以相互替换呢?


代码:

//《C程序设计教程(第四版)——谭浩强》
//习题2.9 编程序用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符。
#include <stdio.h>int main()
{int c1 =getchar();int c2 =getchar();putchar(c1);putchar('\n');printf("%c\n",c2);return 0;
}

运行结果:


(1)变量c1,c2应该定义为字符型或者整型吗?或者二者皆可?

在 C 语言中,getchar函数返回的是一个int类型的值,表示读取到的字符的 ASCII 码。这个设计的原因是,getchar函数需要能够返回所有可能的字符值 (0 到 255) 以及额外的特殊值 EOF(表示文件结束或输入流的结束),因此它返回的是int类型。

但在你的上下文中, 和 变量的类型可以有以下考量:c1c2

  1. 字符型 (char)

    • 如果我们只关心读取到的字符本身,并且确定不会直接处理 EOF,你可以将c1和c2定义为char类型。这样可以节省一些内存(虽然在实际应用中这微不足道)。

    然而,定义为char后你需要特别小心可能的 EOF 情况,因为如果发生 EOF,c1和c2的值可能会被当作正常的字符。这种情况下使用int类型在处理输入时就显得更为安全。

  2. 整型 (int)

    • 如果你将c1和c2定义为int类型,你可以直接存储getchar的返回值(包括正常的字符和 EOF 值)。这样处理起来会更安全,以避免因字符溢出而产生的不确定行为。

(2)要求输出变量的ASCLL码,应该怎么处理?用putchar函数还是printf()函数?

可以使用printf函数,因为它能够方便地格式化输出。尽管putchar函数可以输出字符,但它不适合直接输出一个字符对应的 ASCII 码。

#include <stdio.h>int main()
{
// 提示用户输入两个字符
printf("请输入两个字符(用回车分隔): \n");int c1 = getchar(); // 读取第一个字符
getchar(); // 读取并忽略换行符
int c2 = getchar(); // 读取第二个字符// 输出第一个字符及其 ASCII 码
printf("第一个字符: '%c' 的 ASCII 码是: %d\n", c1, c1);
// 输出第二个字符及其 ASCII 码
printf("第二个字符: '%c' 的 ASCII 码是: %d\n", c2, c2);return 0;
}

(3)整型变量与字符变量是否在涉河情况下都可以相互替换呢?

在 C 语言中,整型变量(如int )和字符变量(如 char)不可以在所有情况下直接相互替换,但在某些情况下可以更安全地操作。以下是一些详细的考虑:

1. 字符与整型的关系

  • 字符类型 (char:通常用于存储单个字符。字符在内部是以其 ASCII 码表示的。
  • 整型类型 (int:用于存储整数值,包括较大的数值。由于int可以表示的范围更大,它可以安全地存储char类型的值。

2. 相互转换

  • 隐式转换:在 C 中,char固定为整数类型的子集,因此所有char值都能被提升为int,但反过来就可能会出现问题,特别是涉及到范围的问题。

    • 例如, 然后声明 char ch = 'A';是合法的, int num = ch;的值将是 65(ASCII 码)。
  • 显式转换:也可以手动进行类型转换。

    char ch = 'A';
    int num = (int)ch; // 显式转换
  • 3. 使用getcharputchar

  • 使用getchar()函数读取字符时,它返回的是int类型,因此你可以安全地将读取的字符值存储在int变量中,也可以存储在char变量中,但是要注意,存储在char中后,如果读取的字符是 EOF,可能会引发问题。

  • putchar()函数需要一个int类型的参数,但它会将int转换为char返回给标准输出。你可以直接使用。​​​​​​​

  • 4. 风险

  • 数据丢失:如果一个char类型的值超出了int范围,尽管在现有情况下通常不太可能,但如果你尝试将一个不合法的char直接赋值给char类型的变量,可能会引发数据丢失。

  • EOF 和无效值:如果你用getchar()函数来读取字符并将其存储在 类型中,一旦读取到 EOF(通常是 -1),可能会因为char类型无法表示负值而导致问题。

相关文章:

C语言典型例题32

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.9 编程序用getchar函数读入两个字符给c1&#xff0c;c2&#xff0c;然后分别用putchar函数和printf函数输出这两个字符。 &#xff08;1&#xff09;变量c1&#xff0c;c2应该定义为字符型或者整型吗&#x…...

第二十五天学习笔记2024.8.9

1、通过frp内网穿透共享数据库信息 [root1 ~]# mysql -p密码 mysql> create user li% identified by 1; mysql> create database test; mysql> grant all on test.* to li; [root1 ~]# tar -xf frp_0.33.0_linux_amd64.tar.gz [root1 ~]# cd frp_0.33.0_linux_a…...

sqlserver将一张表导出成txt

bcp zjwb_sb_20111122.dbo.ep_pb_groupvisitplace out c:/1.txt -n -U sa -P sa...

YOLOv8+DeepSort实现

目录 1&#xff0c;YOLOv8算法简介 2&#xff0c;DeepSort算法介绍 1. SORT目标追踪 3&#xff0c;实现流程 1.检测 2. 生成detections 3. 卡尔曼滤波预测 4.使用匈牙利算法将预测后的tracks和当前帧中的detections进行匹配 5. 卡尔曼滤波更新 4&#xff0c;代码实现 …...

「链表」链表原地算法合集:原地翻转|原地删除|原地取中|原地查重 / LeetCode 206|237|2095|287(C++)

概述 对于一张单向链表&#xff0c;我们总是使用双指针实现一些算法逻辑&#xff0c;这旨在用常量级别空间复杂度和线性时间复杂度来解决一些问题。 所谓原地算法&#xff0c;是指不使用额外空间的算法。 现在&#xff0c;我们利用双指针实现以下四种行为。 //Definition fo…...

【STM32】SPI通信和RTC实时时钟

个人主页~ SPI通信和RTC实时时钟 SPI通信一、简介二、硬件电路三、基本原理四、SPI时序1、时序基本单元2、时序 五、FLASH操作注意事项1、写入操作2、读取操作 六、SPI外设1、简介2、结构 七、传输方式1、主模式全双工连续传输2、非连续传输 RTC实时时钟一、Unix时间戳二、BKP1…...

DAMA学习笔记(十三)-大数据和数据科学

1.引言 大数据不仅指数据的量大&#xff0c;也指数据的种类多&#xff08;结构化的和非结构化的&#xff0c;文档、文件、音频、视频、流数据等&#xff09;&#xff0c;以及数据产生的速度快。数据科学家是指从从数据中探究、研发预测模型、机器学习模型、规范性模型和分析方法…...

【Java】Java 中的 toLowerCase() 方法详解

我最爱的那首歌最爱的angel 我到什么时候才能遇见我的angel 我最爱的那首歌最爱的angel 我不是王子也会拥有我的angel &#x1f3b5; 张杰《云中的angel》 在 Java 编程中&#xff0c;字符串处理是一个非常常见的任务。为了便于开发者操作和格式化字符串&…...

Linux: 进程概念详解

1. 冯诺依曼体系结构 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成 。 【注意】&#xff1a; a. 这里的存储器指的是内存 b. 不考虑缓存情况&#xff0c;这里的CPU能且只能对内存进行读写&#xff0c;不能访问外设(输入或输出设备) c.外…...

【C++】模板详细讲解(含反向迭代器)

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言&#xff1a; C的模板在是泛型编程的重要组成部分&#xff0c;编写在不同类型上工作的代码&#xff0c;而无需为每个类型编写重复的代码&#xff0c;这有助于减少代码冗余并提高代码的可维护性。 模板 模板的介绍 …...

haproxy七层代理详解之-完整安装部署流程及负载均衡实现-及热更新方法

一.负载均衡 1.1负载均衡时什么 负载均衡:Load Balance&#xff0c;简称LB&#xff0c;是一种服务或基于硬件设备等实现的高可用反向代理技术&#xff0c;负载均网络流量等)分担给指定的一个或多个后端特定的服务器或设备&#xff0c;从而提高了衡将特定的业务(web服务、公司…...

C++11 bind

bind bind 用来将可调用对象和参数一起进行绑定。可调用对象包括普通函数、全局函 数、静态函数、类静态函数甚至是类成员函数&#xff0c;参数包括普通参数和类成员。绑定后的 结果&#xff0c;可以使用 std::function 进行保存&#xff0c;并延迟调用到我们需要的时候。 绑…...

LeetCode199 二叉树的右视图

前言 题目&#xff1a; 199. 二叉树的右视图 文档&#xff1a; 代码随想录——二叉树的右视图 编程语言&#xff1a; C 解题状态&#xff1a; 成功解决&#xff01; 思路 二叉树层序遍历问题的变种&#xff0c;右视图即意味着二叉树每层的最后一个节点。 代码 /*** Definiti…...

数据赋能(172)——开发:数据挖掘——影响因素、直接作用、主要特征

影响因素 主要影响因素如下&#xff1a; 数据类型与属性&#xff1a; 数据类型和对象的不同属性会使用不同的数据类型来描述&#xff0c;如年龄可能是整数类型&#xff0c;而生日则是日期类型。数据挖掘时需要对不同的数据类型进行不同的处理&#xff0c;这直接影响到挖掘算法…...

Vue:Vue3-TypeScript-Pinia-Vite-pnpm / 基础项目 / 20240807

一、项目技术栈 / 依赖 序号技术栈版本解释1node20.14.02vue 3.4.31 3vite 5.3.4 4TypeScript 5.2.2 5 types/node 22.0.2 解决TypeScript项目中缺少对应模块的类型定义文件的问题6 element-plus 2.7.8 ui组建7 types/js-cookie js-cookie 3.0.6 3.0.5 8 sass 1.77.8 9 hu…...

windows Qt 录屏 录音

启动录屏录音&#xff1a; connect(&m_Process, &QProcess::readyReadStandardOutput, [&]() {qDebug() << "Standard output:" << QString::fromLocal8Bit(m_Process.readAllStandardOutput()); });connect(&m_Process, &QProcess…...

AAC中的ADTS格式分析

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…...

iOS内存管理---MRC vs ARC

系列文章目录 iOS基础—Block iOS基础—Protocol iOS基础—KVC vs KVO iOS网络—AFNetworking iOS网络—NSURLSession iOS内存管理—MRC vs ARC iOS基础—Category vs Extension iOS基础—多线程&#xff1a;GCD、NSThread、NSOperation iOS基础—常用三方库&#xff1a;Mason…...

【数学分析笔记】第1章第1节:集合(2)

这节我自己补了一些内容&#xff0c;要不然听不太懂陈纪修老师讲的 1. 集合与映射 1.3 子集与真子集 假如有 S \textbf{S} S和 T \textbf{T} T两个集合&#xff0c;其中&#xff0c; S \textbf{S} S的所有元素都属于 T \textbf{T} T&#xff0c;则称 S \textbf{S} S是 T \te…...

大话设计模式:七大设计原则

目录 一、单一职责原则&#xff08;‌Single Responsibility Principle, SRP&#xff09;‌ 二、开放封闭原则&#xff08;‌Open-Closed Principle, OCP&#xff09; 三、依赖倒置原则&#xff08;‌Dependency Inversion Principle, DIP&#xff09; 四、里氏替换原则&am…...

Pretext:值得关注的文本排版引擎陨

一、语言特性&#xff1a;Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一&#xff0c;就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...

实战指南:构建坚不可摧的vCenter HA高可用集群

1. 为什么你的企业需要vCenter HA高可用集群 记得去年有个客户半夜给我打电话&#xff0c;说他们的vCenter突然宕机&#xff0c;整个虚拟化平台瘫痪了。当时正是业务高峰期&#xff0c;损失惨重。这就是典型的单点故障问题——vCenter作为整个vSphere环境的大脑&#xff0c;一旦…...

2026简历模板服务商推荐排行 最新口碑榜 AI智能/高性价比

一、摘要据易观分析2026年行业报告显示&#xff0c;国内简历模板服务市场规模同比增长38%&#xff0c;但市场集中度较低&#xff0c;近40%的服务商存在模板更新滞后、服务响应不及时等问题&#xff1b;80%的求职者表示&#xff0c;优质简历模板能提升50%以上的面试邀约率&#…...

用Python的pydicom库搞定DICOM文件:从读取患者信息到三维重建的保姆级教程

用Python的pydicom库搞定DICOM文件&#xff1a;从读取患者信息到三维重建的保姆级教程 医学影像数据在现代医疗诊断中扮演着至关重要的角色&#xff0c;而DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;作为医学数字成像和通信的国际标准&#…...

OpenClaw云端体验:Qwen3-14b_int4_awq镜像一键部署与自动化测试

OpenClaw云端体验&#xff1a;Qwen3-14b_int4_awq镜像一键部署与自动化测试 1. 为什么选择云端体验OpenClaw 作为一个长期关注AI自动化工具的技术爱好者&#xff0c;我一直在寻找能够快速验证OpenClaw可行性的方案。本地部署虽然可控性强&#xff0c;但配置过程繁琐——从Pyt…...

拼多多商品价格监控实战:用Python爬虫+Excel自动生成竞品分析报告

拼多多竞品价格监控系统&#xff1a;从数据采集到商业决策的全链路实战 在电商行业&#xff0c;价格策略往往是决定销量的关键因素。想象一下这样的场景&#xff1a;你负责运营一家数码配件店铺&#xff0c;某天突然发现竞品的蓝牙耳机价格下调了15%&#xff0c;而你的库存还保…...

OFA-VE效果集:天文星图与观测记录文本逻辑一致性AI核查

OFA-VE效果集&#xff1a;天文星图与观测记录文本逻辑一致性AI核查 1. 引言&#xff1a;当AI遇见星空 想象一下&#xff0c;你是一位天文爱好者&#xff0c;或者是一位科研工作者。你手头有一张刚刚拍摄的深空星图&#xff0c;旁边还附带着一段观测记录的文字描述。你可能会问…...

自然语言处理实战指南:从文本表示到深度学习

自然语言处理实战指南&#xff1a;从文本表示到深度学习 标签&#xff1a;#自然语言处理、#人工智能、#大模型、#大模型实战、#transformer、#机器学习、#深度学习 模块四&#xff1a;项目实战 技术对比 避坑经验 4.1 项目实战&#xff08;中文商品评论情感分析&#xff09; …...

特征选择避坑指南:为什么你的Laplacian Score效果不好?5个常见错误排查

特征选择避坑指南&#xff1a;为什么你的Laplacian Score效果不好&#xff1f;5个常见错误排查 在机器学习的特征选择环节&#xff0c;Laplacian Score&#xff08;拉普拉斯分数&#xff09;因其简洁优雅的图论基础和高效的无监督特性&#xff0c;成为许多数据科学工作者的首选…...

Qwen3-TTS-Tokenizer-12Hz部署避坑指南:from_pretrained路径详解

Qwen3-TTS-Tokenizer-12Hz部署避坑指南&#xff1a;from_pretrained路径详解 1. 引言&#xff1a;为什么你的from_pretrained总是报错 在部署Qwen3-TTS-Tokenizer-12Hz时&#xff0c;90%的报错都集中在from_pretrained这一步。你可能遇到过这些错误提示&#xff1a; "U…...