详解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图像,但成本…...
NotebookLM移动端离线能力真相,92%用户不知道的本地Embedding缓存机制,附配置代码
更多请点击: https://codechina.net 第一章:NotebookLM移动端离线能力真相 NotebookLM 官方未公开支持任何离线推理或文档索引功能,其移动端(iOS/Android)完全依赖与 Google 服务器的实时通信。所有上传的 PDF、TXT 或…...
数字化舆论管控新时代,搜极星赋能企业长效发展
数字化舆论已从传统社交平台、媒体渠道,全面延伸至 AI 大模型对话场景。AI 幻觉、虚假信息扩散、恶意信息投毒、跨平台舆论失控,正成为企业声誉管理的全新挑战。 传统人工排查、被动应对、局部监测的舆论管控模式彻底失效,企业亟需一套全域覆…...
专业的郑州苹果手机维修联系电话口碑佳的
在当今数字化时代,苹果手机已成为人们生活中不可或缺的一部分。然而,手机使用过程中难免会出现各种故障,这时候选择一家专业靠谱的维修店就显得尤为重要。在郑州,果速修凭借其卓越的服务和良好的口碑,成为众多苹果用户…...
如何快速掌握CircuitJS1桌面版的3个核心秘诀
如何快速掌握CircuitJS1桌面版的3个核心秘诀 【免费下载链接】circuitjs1 Standalone (offline) version of the Circuit Simulator with small modifications based on modified NW.js. 项目地址: https://gitcode.com/gh_mirrors/circ/circuitjs1 CircuitJS1 Desktop …...
从零构建Sora 2-UE5.4可信工作流:基于IEEE 1872标准的生成内容元数据注入方案(附GitHub认证仓库)
更多请点击: https://intelliparadigm.com 第一章:从零构建Sora 2-UE5.4可信工作流:基于IEEE 1872标准的生成内容元数据注入方案(附GitHub认证仓库) 核心目标与标准对齐 本工作流严格遵循 IEEE P1872™(O…...
多智能体路由:从场景定义到Agent解析的工程实践
大家好,我是程序员小策。 场景:你正在做一个 AI 面试系统。产品经理说:“我们不光要一个通用聊天机器人,还要一个能自动出题、能给用户答案打分、还能分析用户表情神态的面试官。” 你一拍脑袋:行,不就是…...
使用 Taotoken CLI 工具一键配置团队开发环境中的大模型端点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Taotoken CLI 工具一键配置团队开发环境中的大模型端点 在团队协作开发中,统一管理大模型 API 的接入配置是一个常…...
Dism++终极指南:轻松掌握Windows系统优化与维护的10个关键技巧
Dism终极指南:轻松掌握Windows系统优化与维护的10个关键技巧 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是否曾经因为Windows系统变得越来越慢…...
YOLOv8 ROS:机器人视觉从2D感知到3D空间理解的架构演进
YOLOv8 ROS:机器人视觉从2D感知到3D空间理解的架构演进 【免费下载链接】yolov8_ros Ultralytics YOLOv8, YOLOv9, YOLOv10, YOLOv11, YOLOv12 for ROS 2 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8_ros 在机器人智能化浪潮中,视觉感知…...
RTB点击率预估中的长尾失衡与价值重标定
1. 项目概述:当广告竞价遇上“长尾陷阱”——为什么实时竞价系统里99%的流量不说话,却决定着100%的效果你有没有遇到过这样的情况:训练了一个看起来AUC高达0.92的点击率预估模型,上线后CTR却比老模型还低0.3个百分点?或…...
