详解C语言字符和字符串的输入与输出
字符和字符串的输入与输出
- 一、字符的输入与输出
- 1.1 字符的输入
- 使用 `getchar()`
- 使用 `scanf()`
- 1.2 字符的输出
- 使用 `putchar()`
- 使用 `printf()`
- 二、字符串的输入与输出
- 2.1 字符串的输入
- 使用 `scanf()` 输入字符串
- 使用 `fgets()` 输入字符串
- 2.2 字符串的输出
- 使用 `printf()` 输出字符串
- 使用 `puts()` 输出字符串
- 三、总结与注意事项
在C语言中,字符(char)和字符串(char[] 或 char*)是常用的数据类型,通常用于处理文本数据。
一、字符的输入与输出
1.1 字符的输入
使用 getchar()
getchar() 是一个标准库函数,它从标准输入流(通常是键盘)中读取一个字符,并返回该字符(包括换行符)。
#include <stdio.h>int main() {char ch;ch = getchar(); // 读取一个字符printf("输入的字符是:%c\n", ch);return 0;
}
要点:
getchar()读取的是一个字符(包括空格和换行符)。如果你输入了字母或数字,它会返回相应的字符。- 输入一个字符后,按
Enter键后,字符和换行符会被返回。
注意: 输入时,getchar() 会读取所有字符,包括空格和换行符。如果你想处理换行符,通常需要额外的代码来处理。
使用 scanf()
scanf() 也可以用来读取字符,但它通常用于格式化输入。
#include <stdio.h>int main() {char ch;printf("请输入一个字符:");scanf("%c", &ch); // 读取一个字符printf("输入的字符是:%c\n", ch);return 0;
}
要点:
scanf("%c", &ch)会读取一个字符,并存储在ch中。输入字符后,你需要按下Enter键。
注意:
- 如果在输入其他数据之后使用
scanf("%c", &ch),它会读取输入缓冲区中的换行符或空格。为了避免这一点,可以在之前添加getchar()以清空缓冲区,或者直接使用scanf()时忽略换行符。
scanf("%c", &ch); // 直接读取字符
1.2 字符的输出
使用 putchar()
putchar() 是标准库函数,用于将一个字符输出到标准输出(通常是屏幕)。
#include <stdio.h>int main() {char ch = 'A';putchar(ch); // 输出字符 'A'return 0;
}
要点:
putchar(ch)会将字符ch输出到屏幕,不会自动换行。
使用 printf()
printf() 是更常用的输出函数,也可以用来输出字符。
#include <stdio.h>int main() {char ch = 'A';printf("%c\n", ch); // 输出字符 'A',并换行return 0;
}
要点:
%c是printf的格式化输出符号,用于输出单个字符。- 如果你需要换行,可以手动添加
\n。
二、字符串的输入与输出
字符串是由字符组成的数组,因此处理字符串时,实际上是处理一个以 \0(空字符)结尾的字符数组。
2.1 字符串的输入
使用 scanf() 输入字符串
scanf() 可以用来读取字符串,但它有一个重要的限制:它遇到空格、制表符或换行符会停止读取。它不会处理这些空白字符。
#include <stdio.h>int main() {char str[100];printf("请输入一个字符串:");scanf("%s", str); // 读取一个不包含空格的字符串printf("输入的字符串是:%s\n", str);return 0;
}
要点:
%s会读取连续的非空白字符,直到遇到空格或换行符为止。scanf("%s", str)不会读取空格,如果输入中有空格,只有第一个单词会被读取。
注意:
- 如果输入的字符串超过了指定的大小(如
str[100]),会发生缓冲区溢出。因此,为了避免这一问题,应该限定scanf()读取的字符数:scanf("%99s", str); // 最多读取99个字符,留出一个空间给 '\0'
使用 fgets() 输入字符串
fgets() 是一个更安全、更灵活的输入函数,它允许读取一整行(包括空格),并且会自动在字符串末尾加上 \0。
#include <stdio.h>int main() {char str[100];printf("请输入一个字符串:");fgets(str, sizeof(str), stdin); // 读取一行,包含空格printf("输入的字符串是:%s\n", str);return 0;
}
要点:
fgets()可以读取包含空格的整行文本。- 它会读取换行符(如果输入中包含的话),并且需要处理换行符。
处理换行符:
- 如果输入包含换行符,你可能需要手动去除它。可以使用
strcspn()来查找并去除换行符:str[strcspn(str, "\n")] = '\0'; // 去除换行符
注意:
- 使用
fgets()时,字符串末尾的换行符会被保留。如果不想要它,可以手动删除。 fgets()会阻止缓冲区溢出,因为它限制了读取的字符数。
2.2 字符串的输出
使用 printf() 输出字符串
printf() 是输出字符串最常见的方法。
#include <stdio.h>int main() {char str[] = "Hello, World!";printf("%s\n", str); // 输出字符串 "Hello, World!" 并换行return 0;
}
要点:
%s格式符用于输出字符串,它会自动识别字符串末尾的\0并停止输出。printf()输出时,不会自动添加换行符,除非你显式地在字符串中添加\n或调用printf()时加上\n。
使用 puts() 输出字符串
puts() 是另一个输出字符串的函数,和 printf() 不同的是,puts() 会在字符串末尾自动添加换行符。
#include <stdio.h>int main() {char str[] = "Hello, World!";puts(str); // 输出字符串,并自动换行return 0;
}
要点:
puts()会自动输出换行符,因此你无需手动添加\n。
三、总结与注意事项
-
字符输入:
getchar()和scanf("%c", &ch)都可以读取字符。getchar()会读取换行符或空格,而scanf("%c")不会处理这些问题。
-
字符串输入:
scanf("%s", str)用于读取不包含空格的字符串。fgets(str, sizeof(str), stdin)用于读取包含空格的字符串,并且更安全。
-
字符输出:
- 使用
putchar(ch)输出单个字符。 - 使用
printf("%c", ch)也可以输出字符。
- 使用
-
字符串输出:
printf("%s", str)用于输出字符串。puts(str)输出字符串并自动换行。
-
缓冲区和换行符问题:
- 使用
scanf("%s")时,不能读取包含空格的字符串。建议使用fgets()来读取整行。 - 使用
fgets()时要注意字符串末尾的换行符。
- 使用
相关文章:
详解C语言字符和字符串的输入与输出
字符和字符串的输入与输出 一、字符的输入与输出1.1 字符的输入使用 getchar()使用 scanf() 1.2 字符的输出使用 putchar()使用 printf() 二、字符串的输入与输出2.1 字符串的输入使用 scanf() 输入字符串使用 fgets() 输入字符串 2.2 字符串的输出使用 printf() 输出字符串使用…...
adworld - stack2
adworld - stack2 题目概述:给一个数组(自己控制数组大小和填入的数据),并进行(展示, 增加, 修改值, 求平均值, 退出)菜单选项 存在后门函数(system(“/bin/bash”)),但是没找到栈溢出的点 没判断数组的边界造成任意地址修改 但是如何准确…...
Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
若事与愿违,请相信,上天自有安排,允许一切如其所是 —— 24.11.12 一、进程、线程 现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。 进程 进程:就…...
nuget 管理全局包、缓存和临时文件夹
查看文件夹位置 dotnet nuget locals all --list清空数据 # Clear the 3.x cache (use either command) dotnet nuget locals http-cache --clear nuget locals http-cache -clear# Clear the 2.x cache (NuGet CLI 3.5 and earlier only) nuget locals packages-cache -clea…...
linux物理内存管理:node,zone,page
一、总览 对于物理内存内存,linux对内存的组织逻辑从上到下依次是:node,zone,page,这些page是根据buddy分配算法组织的,看下面两张图: 上面的概念做下简单的介绍: Node:…...
uniapp 设置安全区域
<!-- 获取安全区域 --> <script setup lang"ts"> import { computed, ref } from vuelet systemType ref(1) // #ifdef APP-PLUS || H5 || APP-PLUS-NVUE systemType.value 1 const { safeAreaInsets } uni.getSystemInfoSync() console.log(safeAre…...
渐进式JavaScript框架Vue 3 入门
目录 前言1. Vue 3 的基础入门1.1 什么是 Vue.js1.2 局部使用 Vue 2. Vue 3 的基本配置2.1 准备 HTML 页面并引入 Vue 模块2.2 创建 Vue 应用实例 3. Vue 的数据绑定与界面渲染3.1 插值表达式 4. 常用指令详解4.1 v-for 指令:列表渲染4.2 v-bind 指令:绑…...
【真题笔记】21年系统架构设计师案例理论点总结
【真题笔记】21年系统架构设计师案例理论点总结 从机器学习定义的灵活性和学习算法的可扩展性,对解释器+管道过滤器+隐式调用进行对比分析!面向对象方法开发软件,建立对象模型+动态模型+功能模型,三者关联关系!数据架构的设计过程包括:数据定义、数据分布、数据管理,三者…...
PostgreSQL的奥秘:深入探究事务与锁的秘密世界
PostgreSQL事务 1. 概述 在数据库系统中,事务(Transaction)是执行数据库操作的最小逻辑单位。它确保了一组操作的完整性和一致性。事务可以通过显式的 BEGIN、COMMIT 和 ROLLBACK 语句块来控制,也可以在自动提交模式(…...
Python进行GRPC和Dubbo协议的高级测试
在微服务架构日益流行的今天,分布式系统的复杂性不断增加。GRPC 和 Dubbo 协议作为当今互联网行业中常见的高性能通信协议,已经成为服务之间交互的核心。然而,随着服务调用层次的不断增加,如何有效地测试这两种协议,确…...
全程云OA系统QCPES.asmx存在SQL注入漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
从建立TRUST到实现FAIR:可持续海洋经济的数据管理
1. 引言 随着我们对信息管理方式的信任,我们的社会对数字化数据的以来呈指数级增长。为了跟上大数据的需求,通过不断的努力和持续实践,对“good”数据管理方式的共识也在不断发展和演变。 加拿大正在建设国家基础设施和服务以及研究数据管理…...
基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)
基于SSM的“汽车销售分析与管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 销售经理系统首页图 客户管理图 车辆销…...
vs2015QT项目添加多语言翻译总结
一、简介 当软件有国际化的需求时,就需要多语言翻译功能,最常见的语言就是支持中文和英语,本文介绍在vs2015QT环境下,进行国际化翻译的具体流程。 二、多语言翻译实现流程 1.底层实现原理介绍 QT写的客户端软件,能…...
替换OpenTSDB和HBase,宝武集团使用IoTDB助力钢铁设备智能运维
时序数据库 IoTDB 应用于宝武集团全基地钢铁时序数据管理,激活数据资产,赋能大型设备智能运维。 1. 背景概述 宝武装备智能科技有限公司(以下简称:宝武智维)是中国宝武设备智能运维专业化平台公司,30 余年始…...
MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现
大家好,我是微学AI,今天给大家介绍一下MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现。MathGPT的核心架构是一个精心设计的多层次系统,旨在有效处理复杂的数学问题。其主要组成部分包括 数学知识图谱…...
前端框架大比拼:React.js, Vue.js 及 Angular 的优势与适用场景探讨
文章目录 前言一、React.js特点使用方法适用场景 二、Vue.js特点使用方法适用场景 三、Angular特点使用方法适用场景 四、如何选择合适的前端框架五、前端框架对项目性能的影响结语 前言 随着互联网技术的飞速发展,前端开发已经从简单的页面展示演变为复杂的应用构…...
MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?
文章目录 MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?一、幻读的定义二、幻读带来的问题(一)语义问题(二)数据一致性问题 三、InnoDB 解决幻读的方法四、总结 MySQL45讲 第二十讲 幻读是什么࿰…...
MySQL技巧之跨服务器数据查询:进阶篇-从A数据库复制到B数据库的表中
MySQL技巧之跨服务器数据查询:进阶篇-从A数据库复制到B数据库的表中 基础篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的连接名: MY_ODBC_MYSQ…...
【论文阅读】利用SEM二维图像表征黏土矿物三维结构
导言 在油气储层研究中,黏土矿物对流体流动的影响需要在微观尺度上理解,但传统的二维SEM图像难以完整地表征三维孔隙结构。常规的三维成像技术如FIB-SEM(聚焦离子束扫描电子显微镜)虽然可以获取高精度的3D图像,但成本…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
