C语言 getchar 函数完全解析:掌握字符输入的关键
前言
在C语言中,getchar
是一个非常实用的函数,用于从标准输入流(通常是键盘)读取单个字符。这对于处理文本输入非常有用,尤其是在需要逐个字符处理的情况下。本文将深入探讨 getchar
函数的用法和特点,并提供一些示例代码。
1. getchar 函数简介
getchar
函数是从标准输入流读取单个字符的标准库函数。它属于 <stdio.h>
头文件的一部分。
基本语法:
int getchar(void);
getchar
函数返回一个 int
类型的值,这是因为 ASCII 字符可以用 unsigned char
表示,而 unsigned char
可以隐式转换为 int
。如果到达文件结束符(EOF),则返回 -1
。
2. getchar 函数的基本使用
让我们看一个简单的例子,演示如何使用 getchar
函数读取用户输入的一个字符。
1#include <stdio.h>
2
3int main() {
4 int ch;
5
6 printf("Enter a character: ");
7 ch = getchar(); // 读取一个字符
8 printf("You entered: %c\n", ch);
9
10 return 0;
11}
输出:
1Enter a character: A
2You entered: A
解释:
int ch;
定义一个整数变量ch
用于存储输入的字符。ch = getchar();
读取用户输入的一个字符。printf("You entered: %c\n", ch);
打印输入的字符。
3. getchar 与缓冲区
getchar
函数默认会等待用户输入一个完整的行,然后才读取第一个字符。这意味着如果你按下回车键后才调用 getchar
,它会读取你之前输入的第一个字符。为了避免这种情况,你可以使用 scanf
或者 getc
函数来清空缓冲区。
1#include <stdio.h>
2
3int main() {
4 int ch;
5
6 printf("Press any key and then enter: ");
7 getchar(); // 清空缓冲区
8 ch = getchar(); // 读取一个字符
9 printf("You entered: %c\n", ch);
10
11 return 0;
12}
输出:
1Press any key and then enter: A
2You entered: A
解释:
getchar();
在读取下一个字符之前清空缓冲区。
4. 使用 getchar 处理多行输入
getchar
可以连续读取多个字符,直到遇到文件结束符(EOF)。下面的示例演示了如何使用 getchar
读取多行文本。
1#include <stdio.h>
2
3int main() {
4 int ch;
5
6 printf("Enter some text (press Ctrl+D to finish):\n");
7
8 while ((ch = getchar()) != EOF) {
9 printf("%c", ch); // 输出读取的字符
10 }
11
12 printf("\n");
13
14 return 0;
15}
输出:
1Enter some text (press Ctrl+D to finish):
2Hello
3World
4Hello World
解释:
while ((ch = getchar()) != EOF)
循环读取字符直到遇到文件结束符。printf("%c", ch);
打印读取的字符。
5. getchar 与条件判断
getchar
可以与条件判断结合使用,以实现特定的逻辑流程。
1#include <stdio.h>
2
3int main() {
4 int ch;
5
6 printf("Enter a character: ");
7 ch = getchar();
8
9 if (ch >= 'a' && ch <= 'z') {
10 printf("You entered a lowercase letter.\n");
11 } else if (ch >= 'A' && ch <= 'Z') {
12 printf("You entered an uppercase letter.\n");
13 } else {
14 printf("You entered something else.\n");
15 }
16
17 return 0;
18}
输出:
1Enter a character: a
2You entered a lowercase letter.
解释:
- 使用
if
语句根据输入字符的范围做出判断。
6. getchar 与文件结束符
当 getchar
遇到文件结束符(EOF)时,它会返回 -1
。你可以利用这一点来检测输入是否结束。
1#include <stdio.h>
2
3int main() {
4 int ch;
5
6 printf("Enter some text (press Ctrl+D to finish):\n");
7
8 while ((ch = getchar()) != EOF) {
9 printf("%c", ch); // 输出读取的字符
10 }
11
12 printf("\nEnd of input reached.\n");
13
14 return 0;
15}
输出:
1Enter some text (press Ctrl+D to finish):
2Hello
3World
4Hello World
5End of input reached.
解释:
- 当
getchar
返回-1
时,循环结束。
结论
getchar
函数是C语言中处理字符输入的一个重要工具。通过上述示例,你应该已经了解了如何使用 getchar
函数以及它的一些高级用法。这种能力对于处理文本输入和编写交互式的程序非常有帮助。
相关文章:
C语言 getchar 函数完全解析:掌握字符输入的关键
前言 在C语言中,getchar 是一个非常实用的函数,用于从标准输入流(通常是键盘)读取单个字符。这对于处理文本输入非常有用,尤其是在需要逐个字符处理的情况下。本文将深入探讨 getchar 函数的用法和特点,并…...
Docker安装mysql8并配置主从复制
1. 安装mysql8 1.1 新增挂载文件 # 新增mysql挂载文件夹 mkdir -p /root/docker/mysql/m01/log mkdir -p /root/docker/mysql/m01/data mkdir -p /root/docker/mysql/m01/conf1.2 新增mysql配置文件 # 新增mysql配置文件 cd /root/docker/mysql/m01/conf vim my.cnf # 下面是…...
快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例
本文作者:胡玉龙,快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年,快手的数据量已突破800TB大关,其中最大集群的数据量更是达到了数百TB级别。为此,快手将数据…...
基于Node.js+Express+MySQL+VUE实现的计算机毕业设计共享单车管理网站
单车信息选择骑行 骑行状态留言公告/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 目录 功能图 界面展示 开发目标 开发背景意义 开发意义 开发目的 项目概述 技术选型与理由 系统设计与功能实现 项目可执行性分析 系统架构需求 性能需…...
人工智能辅助的神经康复
人工智能辅助的神经康复是通过应用人工智能(AI)技术来改善神经系统损伤患者的康复过程。此领域结合了深度学习、数据分析和机器人技术,旨在提升康复效果、个性化治疗方案和监测进展。以下是该领域的关键组成部分和应用: 1. 康复评…...
KKT实际运用 -MATLAB
FMINCON函数可以很方便的求出:fun:目标函数,即需要最小化的函数,输入参数为向量x,输出为标量f(x)。x0:初始点,即求解过程的起始点,可以是标量、向量或矩阵。A和b:线性不等…...
php在线相册
1、将静态页面效果完成 解压到www里 整个数据 暂时是错误的 建立连接密码为root 运行sql文件 右键根目录刷新 刷新后成功 开始 测试 如果需要上传照片,点击创建相册,选择上传文件,选择文件后退出 导入alumbenew2 2.提交表单方式 3.利用ph…...
Xcode手动安装SDK模拟器
1.下载SDK模拟器&Xcode SDK和Xcode官方下载地址 2.下载好后使用命令将SDK导入到Xcode中如下命令 注:我是在/Applications 目录下执行的命令,模拟其地址直接拖拽过来 sudo xcode-select -s Xcode.app xcodebuild -runFirstLaunch xcodebuild -imp…...
Docker安装consul + go使用consul + consul知识
1. 什么是服务注册和发现 假如这个产品已经在线上运行,有一天运营想搞一场促销活动,那么我们相对应的【用户服务】可能就要新开启三个微服务实例来支撑这场促销活动。而与此同时,作为苦逼程序员的你就只有手动去 API gateway 中添加新增的这…...
JWT 漏洞 - 学习手册
0x01:JWT 前导知识 0x0101:JWT 详解 0x02:JWT 漏洞介绍 0x0201:JWT 漏洞介绍 0x03:JWT 挖掘思路 JWT 漏洞挖掘思路 - JWT Payload 敏感信息泄露 备注:通过泄露的 JWT Payload 获取用户的敏感信息&#…...
HTML【知识改变命运】03font 字体标签
题目:在页面上显示"北京"两个字,字体为微软雅黑,颜色为红色,大小为40xp; font标签可以修饰字体的大小,颜色,和字体 属性:color颜色,face字体,size大…...
集师专属知识付费小程序搭建 心理咨询小程序搭建
一、产品简介 集师SaaS知识付费软件,为知识创业者或商家提供一站式内容交付解决方案,助力商家搭建集品牌传播、商业变现和用户运营于一体的线上知识服务系统,覆盖全渠道经营场景,占据每个流量入口,使流量变现快速高效…...
https://www.aitoolpath.com/ 一个工具数据库,目前储存了有2000+各种工具。每日更新
AI 工具爆炸?别怕,这个网站帮你整理好了! 哇塞,兄弟们!AI 时代真的来了!现在各种 AI 工具跟雨后春笋似的,噌噌噌地往外冒。AI 写作、AI 绘画、AI 代码生成……简直是要逆天啊! 可是…...
科技的成就(六十三)
583、八小时工作制 最先提出这种理念的人竟然也是一名企业家,而且还是一名空想社会主义者。这名叫做罗伯特欧文的英国人,也凭借先进的人本管理理念成为了现代人事管理之父。 584、SDN(软件定义网络) "SDN(软件定…...
浅谈抗量子密码学:保护未来的数字安全
一、引言 随着量子计算机技术的发展,传统的加密算法面临前所未有的挑战。量子计算机利用量子位(qubits)的特性,能够在理论上比经典计算机更快地破解现有的加密系统。为了应对这一威胁,研究者们正在开发所谓的“抗量子…...
10款物联网开源嵌入式操作系统对比分析
摘要 本文对目前市场上广受欢迎的10款物联网开源嵌入式操作系统进行了深度对比分析,包括Huawei LiteOS、RT-Thread、AliOS Things等。通过探讨这些操作系统的实时性、可扩展性、特点、运行要求、开发社区活跃度和应用领域等方面,帮助开发者更好地理解它…...
Elasticsearch深度攻略:核心概念与实践应用
目录 一、Elasticsearch简介1、Elasticsearch是什么2、Elasticsearch的应用场景3、Elasticsearch的核心概念 二、Elasticsearch安装与配置1、安装Elasticsearch(1)系统要求(2)下载Elasticsearch(3)解压安装…...
TLS详解
什么是TLS TLS(Transport Layer Security)传输层安全性协议 ,它的前身是SSL(Secure Sockets Layer)安全套接层,是一个被应用程序用来在网络中安全的通讯协议, 防止电子邮件、网页、消息以及其他协议被篡改或是窃听。是用来替代SSL的…...
正则表达式中的特殊字符
正则表达式中的特殊字符 字符类预定义字符类量词锚点分组和捕获选择、分支和条件反义和否定转义字符示例 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 在正则表达式中,有许…...
EP42 公告详情页
文件路径: E:/homework/uniappv3tswallpaper/api/apis.js 先添加相应的api。 import {request } from "/utils/requset.js"export function apiGetBanner() {return request({url: "/homeBanner"}) } export function apiGetDayRandom() {ret…...
游戏找不到xinput1_3.dll的原因及解决方法
1. xinput1_3.dll 基本信息 1.1 文件名 xinput1_3.dll 是一个动态链接库(DLL)文件,它属于 Microsoft DirectX for Windows 的一部分。这个文件主要负责处理与 Xbox 360 控制器和其他兼容 XInput 标准的游戏手柄相关的输入信号,确…...
防反接电路设计
方案1 串联二极管, 优点:成本低、设计简单 缺点:损耗大,P ui 方案2 串联自恢复保险丝 当电源反接的时候,D4导通,F2超过跳闸带你留,就会断开,从而保护了后级电路 方案3 H桥电路…...
SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
SpringMVC九大内置组件之HandlerMapping处理器映射器-AbstractHandlerMethodMapping类以及子类RequestMappingHandlerMapping如何将Controller修饰的注解类以及类下被注解RequestMapping修饰的方法存储到处理器映射器中。 从RequestMappingHandlerMapping寻找: AbstractHandle…...
毕业设计选题:基于ssm+vue+uniapp的购物系统小程序
开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…...
【动态规划-最长公共子序列(LCS)】力扣583. 两个字符串的删除操作
给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1: 输入: word1 “sea”, word2 “eat” 输出: 2 解释: 第一步将 “sea” 变为 “ea” ,第二步将 "e…...
【分布式微服务云原生】8分钟探索RPC:远程过程调用的奥秘与技术实现
摘要 在分布式系统中,RPC(Remote Procedure Call,远程过程调用)技术是连接各个组件的桥梁。本文将深入探讨RPC的概念、技术实现原理、以及请求处理的详细过程。通过清晰的结构、流程图、代码片段和图表,我们将一起揭开…...
Linux操作系统中Redis
1、什么是Redis Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 可以理解成一个大容量的map。…...
每日论文5—06TCAS2锁相环电流匹配的gain-boosting电荷泵
《Gain-Boosting Charge Pump for Current Matching in Phase-Locked Loop》 06TCAS2 本质上和cascode来增加输出电阻,从而减小电流变化的思路是一样的。这里用了放大器来增加输出电阻。具体做法如下图: 如图1(a),A3把Vb和Vx拉平࿰…...
接口隔离原则(学习笔记)
客户端不应该被迫依赖于它不使用的方法:一个类对另一个类的依赖应该建立在最小的接口上。 上面的设计我们发现他存在的问题,黑马品牌的安全门具有防盗,防水,防火的功能。现在如果我们还需要再创建一盒传智品牌的安全门,…...
基于ESP8266—AT指令连接阿里云+MQTT透传数据(1)
在阿里云创建MQTT产品的过程涉及几个关键步骤,主要包括注册阿里云账号、实名认证、开通MQTT服务实例、创建产品与设备等。以下是详细的步骤说明: 一、准备工作 访问阿里云官网,点击注册按钮,填写相关信息(如账号、密码、手机号等)完成注册。注册完成后,需要对账号进行实…...
在车子男女做的视频网站/百度指数官网入口
原文:jakearchibald.com/2015/tasks-… 译者:前端小智 为了保证的可读性,本文采用意译而非直译。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 思考下面 JavaScript 代码: console.log(script star…...
霸州网站制作/安卓优化大师老版本下载
今天我们来学习:码云(Gitee)授权第三方登录,相比之前 支付宝登录、腾讯QQ登录 以及 新浪微博登录 来说,相对于比较简单 一、准备工作 1、登录 码云官网 官网地址:https://gitee.com/注册、登录我们的账号…...
信用门户网站建设/备案查询网
64位Fedora运行32位C程序所需的类库 作者:王传对 | 出处:博客园 | 2011/9/8 19:29:21 | 阅读64次 Debug 1--> /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory Soulution-->安装32位系统类库 >>yum install glibc.i686…...
静态网站怎么做滚动文字/网络推广营销软件
众所周知,苹果已经为 iPhone、AIrPods、Apple Watch 和 Mac 等设备上引入了电池健康管理功能,旨在通过降低电池化学老化的速度来延长电池的使用寿命。然而,在 M1 Mac 上,关闭电池运行状况管理的选项已消失,也就是说用户…...
网站 收录 做301/昆明百度关键词优化
PIXHAWK、PX4、APM APM固件专为Arduupilot开发的固件,现也用于PIXHAWK。有ArduCopter社区支撑、开放,功能全、迭代升级快,适合直接用。由于有较多的历史兼容性需求,软件代码体系相对杂乱,还封装了PX4的内核࿰…...
温州本地论坛/百度seo搜索营销新视角
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1234 Solved: 878[Submit][Status][Discuss]Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<M<12; 1<N<12),每一格…...