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

数据类型与变量-Part3-输入输出格式化艺术

C语言输入输出格式化艺术系列导航✅ Part 1: C语言数据类型与变量基础篇✅ Part 2: C语言内存探秘进阶篇 Part 3: C语言输入输出格式化艺术 ← 你在这里上一篇我们深入了内存底层这篇我们来聊聊你和计算机对话的核心技能——printf和scanf。掌握格式化输出输入你就能写出像专业工程师一样的日志和交互界面。一、关于 Visual Studio 的强迫症警告如果你在 Windows 上用 Visual Studio 学习 C 语言一定遇到过这个烦人的红字“This function or variable may be unsafe. Consider using scanf_s instead…”为什么会有这个警告微软认为传统的 C 标准库函数如scanf、strcpy、sprintf存在安全隐患容易导致缓冲区溢出。VS 会强制报 C4996 警告建议你换成微软特有的安全版本如scanf_s。但scanf_s不是标准 C 语言函数在 GCC、Clang 等其他编译器上无法运行。为了保持代码的跨平台兼容性我们通常加一行宏定义来屏蔽警告#define_CRT_SECURE_NO_WARNINGS⚠️绝对致命的规则这行代码必须放在所有#include头文件之前放在后面无效双刃剑的真相为什么要加隐患在哪让我们专注于学习标准 C而不是微软的私有扩展scanf确实不安全——定义char name[10]用户输入 20 个字符程序就崩溃了阿文碎碎念初学时先用这个宏屏蔽警告但心里要时刻绷紧一根弦——永远不要相信用户的输入是规矩的。后期学了缓冲区限制记得把防御措施加上去。二、printf — 把数据送出去2.1 基本用法printf()的作用是将参数文本输出到屏幕。#includestdio.hintmain(){printf(Hello World);// 不自动换行printf(Hello World\n);// 加 \n 自动换行return0;}printf()不会在行尾自动添加换行符。想让光标移到下一行开头记得加\n。文本内部的换行也靠\nprintf(Hello\nWorld\n);// 两行输出// 等价写法printf(Hello\n);printf(World\n);2.2 占位符 — “这个位置留给别人”printf()可以在输出文本中指定占位符这个位置可以用其他值代入。printf(There are %d apples\n,3);// 输出: There are 3 apples占位符的第一个字符一律为%第二个字符表示类型%d表示整数%s表示字符串。printf(%s will come\n,特朗普);// 输出: 特朗普 will come2.3 格式化输出的完整公式printf的核心在于它的格式字符串完整写法拆解为五个部分%[标志][最小宽度][.精度][长度修饰符]类型说明符类型说明符 — 决定打印什么类型的数据这是占位符的灵魂必须和传入的变量类型严格匹配。类别占位符适用场景与说明⭐ 推荐指数基础整数%d,%iint最常用的有符号整数⭐⭐⭐⭐⭐%uunsigned int无符号整数⭐⭐⭐⭐%o八进制输出不带前缀 0⭐⭐⭐%x,%X十六进制输出嵌入式开发、颜色值⭐⭐⭐长度修饰整数%hd,%hushort短整型⭐⭐⭐%ld,%lulong长整型处理大数字、时间戳⭐⭐⭐⭐%lld,%llulong long超长整型⭐⭐⭐⭐浮点数%f,%Fdouble普通小数形式printf 中 float 会自动提升为 double⭐⭐⭐⭐⭐%.2f保留两位小数金钱计算必备⭐⭐⭐⭐⭐%e,%E科学计数法⭐⭐⭐%g,%G自动选最短格式去掉无用 0⭐⭐⭐⭐长双精度%Lf,%Lelong double注意是大写 L⭐⭐⭐字符与字符串%c单个字符⭐⭐⭐⭐⭐%s字符串⭐⭐⭐⭐⭐系统与指针%p打印指针地址调试神器⭐⭐⭐⭐%zusize_tsizeof的返回值⭐⭐⭐⭐%tdptrdiff_t指针差值⭐⭐⭐特殊功能%n将已输出字符数存入变量⭐⭐%%输出一个普通的百分号%⭐⭐⭐⚠️平台差异注意long double的占位符在 Windows (MSVC) 和 Linux 上有差异。MSVC 中long double往往是double的别名通常直接用%fLinux 下用%Lf。跨平台代码务必注意这一点。⚠️printf vs scanf 的关键区别在printf中float类型会自动提升为double所以打印float和double都用%f。但在scanf中没有这种自动提升读取float用%f读取double必须用%lf——这是很多新手踩的坑标志 — 决定对齐和样式写在%后面用来微调输出的外观标志作用示例-左对齐默认是右对齐%-10d强制显示符号正数也加%d→50用 0 填充前导空格%05d→00007空格正数前面留一个空格负数保持-% d→5或-5避坑指南%04d是打印编号的神器。想显示0007而不是7用它就对了最小宽度 — 决定最少占多少位置写在标志后面是一个非负整数。如果实际内容 最小宽度 → 左边补空格或0如果实际内容 最小宽度 →按实际长度完整打印不会截断%5d 打印 123 → 123左边补 2 个空格 %5d 打印 123456 → 123456超长不截断精度 (.precision) — 决定精确度写在宽度后面以点号.开头数据类型精度含义示例浮点数 (%f)小数点后保留几位默认6位%.2f→3.14字符串 (%s)最多打印几个字符%.3s→hel整数 (%d)最少显示几位不足补0%.5d→00123 宽度和精度经常结合使用%8.2f 总宽度至少 8 位其中小数占 2 位。长度修饰符 — 决定数据的具体长短修饰符适用类型配合占位符示例hshort%hd,%hul小写Llong%ld,%lull两个小写Llong long%lld,%lluL大写Llong double%Lf2.4 完整代码演示#includestdio.hintmain(){// 1. 补零与宽度控制常用于编号、时间printf(编号: %04d\n,7);// 输出: 编号: 0007// 2. 左对齐与宽度控制常用于打印表格printf(|%-10s|%10s|\n,姓名,分数);// 输出: |姓名 | 分数|printf(|%-10s|%10.1f|\n,张三,95.67);// 输出: |张三 | 95.7|// 3. 强制显示正负号printf(温度变化: %d 度\n,5);// 输出: 温度变化: 5 度printf(温度变化: %d 度\n,-3);// 输出: 温度变化: -3 度// 4. 字符串截取printf(缩写: %.3s\n,January);// 输出: 缩写: Jan// 5. 打印指针地址inta10;printf(变量a的地址: %p\n,a);return0;}三、scanf — 把数据读进来3.1 基本用法scanf用于从键盘获取数据到程序中的变量。#includestdio.hintmain(){intscore0;printf(请输入成绩:);scanf(%d,score);printf(成绩是%d\n,score);return0;}⚠️核心要点score前面的取地址符一定不能省略为什么printf是把变量里的数送出去屏幕所以传的是值scanf是把键盘的数读进来变量所以传的是地址——告诉计算机把数据存到这个变量的家里。3.2 一次读取多个变量scanf(%d%d%f%f,i,j,x,y);输入时可以用空格隔开一行或多行都可以scanf会自动跳过空格和换行符。⚠️避坑指南格式字符串中除了占位符和空白字符之外其他任何普通字符都是非输入控制符。scanf(%d,%d,%f,%f,i,j,x,y);// 用户输入必须严格匹配10,20,3.5,4.8// 输错任何一个标点后面的变量就无法正确读取3.3 scanf 的返回值scanf()的返回值是整数表示成功读取的变量个数返回值含义正数 N成功读取了 N 个变量0没有读取任何项或匹配失败EOF (-1)遇到文件结尾或读取错误#includestdio.hintmain(){inta0,b0;floatf0.0f;intrscanf(%d %d %f,a,b,f);printf(a%d b%d f%f\n,a,b,f);printf(r %d\n,r);return0;}测试场景输入返回值 r说明10 20 3.53三个全部读取成功10 20 CtrlZ2只读了两个第三个读取失败CtrlZ不输入任何数据-1 (EOF)直接遇到文件结尾3.4 常用占位符占位符读取类型说明%c字符%d整数%ffloat%lfdouble输入专用。printf输出时用%f因为 float 会自动提升为 double。scanf输入时必须用%lf来获取double的精确地址。%s字符串⚠️核心避坑 —%s的危险性charname[11];scanf(%s,name);上面代码是一个经典的缓冲区溢出漏洞。name数组长度 11最多存 10 个字符 \0但用户可以输入任意长度的字符串正确写法charname[11];scanf(%10s,name);// 限制最多读 10 个字符阿文碎碎念永远在%s前加一个数字限制留出\0的位置。这是防御性编程的基本素养。不加限制的%s就像是开着门欢迎黑客进来。3.5 严格按照格式化形式输入#includestdio.hintmain(){intyear0,month0,day0;scanf(%d-%d-%d,year,month,day);printf(%d %d %d\n,year,month,day);return0;}用户必须输入2025-01-01格式输入2025/01/01就会解析失败。inta;scanf(a%d,a);// 输入必须是a10不能直接输入 103.6 循环读入 — OJ 题常见场景scanf返回 EOF 表示读取结束所以! EOF就表示还有数据可读#includestdio.hintmain(){inta,b;while(scanf(%d%d,a,b)!EOF){printf(a%d,b%d\n,a,b);}printf(程序结束\n);return0;}输入输出测试输入输出1 2a1,b2CtrlZ(3次VS环境)程序结束小结这篇我们搞懂了输入输出的格式化艺术VS 安全警告#define _CRT_SECURE_NO_WARNINGS必须放最前面它是一把双刃剑printf 公式%[标志][宽度][.精度][长度修饰符]类型说明符——掌握它你就是排版大师printf vs scanf 的关键区别printf 中 float 自动提升为 double都用%fscanf 中 float 用%fdouble必须用%lfscanf 核心传地址不是传值——因为它是把数据读进来%s必须加数字限制scanf(%10s, name)而不是scanf(%s, name)循环读入while(scanf(...) ! EOF)是 OJ 题的标配系列导航✅ Part 1: C语言数据类型与变量基础篇✅ Part 2: C语言内存探秘进阶篇 Part 3: C语言输入输出格式化艺术 ← 你在这里三篇系列文章完结感谢阅读如果觉得有帮助欢迎点赞收藏转发 ❤️

相关文章:

数据类型与变量-Part3-输入输出格式化艺术

C语言输入输出格式化艺术系列导航 ✅ Part 1: C语言数据类型与变量(基础篇)✅ Part 2: C语言内存探秘(进阶篇)📍 Part 3: C语言输入输出格式化艺术 ← 你在这里上一篇我们深入了内存底层,这篇我们来聊聊你和…...

【Web安全】-企业资产信息收集(1):信息收集介绍,域名信息收集,主域名查询,ICP备案号查询,备案实体查询,工业和信息化部政务服务平台查询,怎样收集

🦆 个人主页:深邃- ❄️专栏传送门:《C语言》《数据结构与算法》《Web安全》 🌟Gitee仓库:《C语言》《数据结构与算法》 特此声明:本次信息收集均在日期授权时间内收集,并且都将所有人员信息打…...

CNKI-download:3步实现知网文献批量下载与管理的Python自动化工具

CNKI-download:3步实现知网文献批量下载与管理的Python自动化工具 【免费下载链接】CNKI-download :frog: 知网(CNKI)文献下载及文献速览爬虫 (Web Scraper for Extracting Data) 项目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 你是否曾为手动…...

从零入门 OpenAI Codex|登录、权限、终端、记忆配置全实操

我先来简单介绍一下Codex。 Codex是 OpenAI 推出的 AI 编程模型与工具系列。Codex 最初于 2021 年作为 OpenAI API 的一部分发布,基于 GPT 架构专门针对代码数据进行了训练。2024 至 2025 年间,OpenAI 推出了独立的 Codex CLI命令行工具,使其…...

Kubernetes DaemonSet深度解析:管理集群守护进程的最佳实践

Kubernetes DaemonSet深度解析:管理集群守护进程的最佳实践 一、DaemonSet概述 DaemonSet 是Kubernetes中用于在集群的每个节点上运行一个Pod副本的控制器。它确保所有节点(或满足特定条件的节点)都运行该Pod的一个实例。 1.1 DaemonSet应…...

昇腾CANN runtime Stream 调度引擎:从命令队列到 AI Core 的执行链路

用户看到的是一行 torch.nn.functional.softmax(x)&#xff0c;背后 runtime 要做&#xff1a;分配 Stream、入队命令、调度到 AI Core、等待完成、同步结果。如果这一行的延迟是 10μs&#xff0c;runtime 的调度开销必须 < 0.5μs——否则就是 5% 的性能损失。 runtime 的…...

Kubernetes StatefulSet深度解析:管理有状态应用的最佳实践

Kubernetes StatefulSet深度解析&#xff1a;管理有状态应用的最佳实践 一、StatefulSet概述 StatefulSet 是Kubernetes中用于管理有状态应用的控制器。它为Pod提供稳定的网络标识和持久化存储&#xff0c;确保Pod的有序部署、扩展和更新。 1.1 StatefulSet vs Deployment …...

JDK常用类与工具(速览版)

JDK常用类与工具&#xff08;速览版&#xff09;JDK&#xff08;Java Development Kit&#xff09;提供了丰富的标准库和实用工具&#xff0c;它们构成了Java开发者日常工作的基石。掌握这些核心类、集合框架、并发工具、IO/NIO库、日期时间API、正则表达式、异常处理机制、日志…...

GPS测速仪SpeedView 3.2.0汉化版 精准速度 实时测速工具

一款实时测速应用程序&#xff0c;英文名为“SpeedView”&#xff0c;安装到手机上就能够在开车的时候查看仪表盘车辆的速度是否准确 实时测速&#xff1a;通过GPS精准定位&#xff0c;实时显示当前速度、平均速度和最高速度&#xff0c;支持多种单位切换&#xff08;km/h、mp…...

阿里巴巴运营/2026年阿里巴巴1688店铺效果越来越差的3个核心原因(附解决方案)

阿里巴巴运营/2026年阿里巴巴1688店铺效果越来越差的3个核心原因&#xff08;附解决方案&#xff09;最近很多工厂老板跟我说&#xff0c;小峰老师&#xff0c;我这1688店铺怎么越做越没效果了&#xff1f;明明以前还能来几个询盘&#xff0c;现在越来越少&#xff0c;是不是16…...

CANN-ATB量化推理-昇腾NPU上W8A8量化为什么比W4A16更实用

Llama2-70B 权重 140GB&#xff0c;8 卡 TP 刚好放得下但没什么余量给 KV Cache。W8A8 量化把权重从 fp16 压到 int8&#xff0c;权重体积减半&#xff0c;4 卡就能跑 70B。W4A16 理论上压得更狠&#xff08;4 倍压缩&#xff09;&#xff0c;但精度损失在实际业务里往往不可接…...

CANN-HCCL-昇腾NPU分布式训练的通信库怎么选

8 卡 Atlas 800I A2 内部走 HCCS&#xff08;带宽 200GB/s&#xff09;&#xff0c;跨机走 RoCE&#xff08;带宽 100GB/s&#xff09;。HCCL 是昇腾NPU的通信库&#xff0c;对标 NVIDIA 的 NCCL。Tensor Parallel 和 Pipeline Parallel 的 All-Reduce、All-to-All 都靠它。 HC…...

nvm-setup安装步骤详解

nvm-setup是 Node Version Manager&#xff08;Node.js 版本管理器&#xff09;​ 的安装包。装了它&#xff0c;你就能在一台电脑上随时切换多个 Node.js 版本&#xff0c;做前端开发、跑不同项目的必备工具。一、准备工作安装包下载&#xff1a;https://wwbkk.lanzoub.com/iU…...

独立开发者如何利用 Taotoken 的 Token Plan 套餐以更优成本启动 AI 项目

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何利用 Taotoken 的 Token Plan 套餐以更优成本启动 AI 项目 对于独立开发者或小型工作室而言&#xff0c;在项目启动…...

工业级大模型学习之路021:LangChain零基础入门教程(第四篇):文档加载与文本分块技术

一、文档处理是 RAG 系统的基石1.1 为什么文档处理决定了 RAG 系统的上限&#xff1f;RAG 系统的核心逻辑是 **"检索相关文档片段 → 喂给大模型生成回答"**&#xff0c;整个流程的质量完全依赖于文档处理环节&#xff1a;如果文档解析失败&#xff0c;再好的检索和生…...

深度学习安全帽佩戴检测系统

1 前言 今天学长向大家介绍一个机器视觉的毕设项目&#xff0c;深度学习安全帽佩戴检测系统 项目运行效果&#xff1a; 毕业设计 深度学习安全帽佩戴检测系统&#x1f9ff; 项目分享:见主页简介 1 课题背景 建筑工人头部伤害是造成建筑伤亡事故的重要原因。佩戴安全帽是防止…...

解决华硕灵耀X双屏Linux下扬声器不工作的问题

解决华硕灵耀X双屏Linux下扬声器不工作的问题系统信息解决方法0. 备份系统1. 修改内核启动参数&#xff0c;使用HDA驱动2. 测试修复方案3. 持久化修复方案系统信息 我的电脑是&#xff1a;华硕灵耀X双屏Pro UX5100HM 电脑声卡为&#xff1a;ALC294 操作系统为&#xff1a;Manj…...

第二周学习

学习&#xff08;一&#xff09;、低通滤波器1、原理&#xff08;为什么方波经过低通滤波器变成了正弦波&#xff09;傅里叶变换对于f&#xff08;t&#xff09;来说&#xff0c;只要f&#xff08;t&#xff09;是周期的&#xff0c;则一定可以将f&#xff08;t&#xff09;拆解…...

【Linux驱动开发】第12天:Linux设备树核心:树形结构+节点+属性 完整全解

目录 设备树树形结构概述节点&#xff08;Node&#xff09;全解&#xff1a;命名规范标准节点常用设备节点属性&#xff08;Property&#xff09;全解&#xff1a;类型核心属性总线专用属性标签与节点引用&#xff1a;设备树复用的核心常见错误与注意事项总结&#xff1a;驱动…...

2026年亲测AI写作辅助软件指南(高效定稿版)

为解决学术写作中效率与合规两大核心痛点&#xff0c;本文精选8款高适配性AI论文写作工具&#xff08;按综合优先级排序&#xff09;&#xff0c;围绕中文学术规范适配、真实参考文献生成、格式标准化、高性价比四大核心维度筛选&#xff0c;同时配套分场景精准选型方案与学术合…...

安全打底・能力拉满:我的 OpenClaw 龙虾生态 Skill 清单

2026开年AI圈两大热词&#xff1a;龙虾&#xff08;OpenClaw&#xff09;、Skill插件。龙虾是短期流量话题&#xff0c;热度来得快去得快&#xff1b;而Skill插件可一次部署、长期复用&#xff0c;真正落地到日常办公、协作、社交场景。 市面多数Skill推荐内容堆砌命令、实用性…...

HTML应用指南:利用GET请求获取智己汽车门店位置信息

智己汽车作为高端智能电动汽车品牌&#xff0c;深度融合先锋设计美学、纯电驱动技术、高阶智能驾驶与全场景出行服务&#xff0c;依托L7、LS7、LS6、L6等产品矩阵&#xff0c;打造兼具科技感与驾控乐趣的高端出行体验。在营销推广层面&#xff0c;智己摒弃传统4S店模式&#xf…...

2025大厂Java后端面试:RAG高频考点【干货】

根据近期&#xff08;2025-2026年&#xff09;牛客网上字节、腾讯、阿里、快手、京东等大厂的Java后端面经&#xff0c;RAG&#xff08;检索增强生成&#xff09;已高频结合传统Java八股进行考察。&#x1f4da; 面试问题分类与总结1. &#x1f3d7;️ RAG 基础概念与理解这是面…...

传统FPM项目怎么渐进式迁移到Swoole/Hyperf?

传统 FPM 项目渐进式迁移到 Swoole / Hyperf 完整方案下面是一份实战派迁移指南,不搞理想化"重写",而是一边赚钱一边换引擎。---一、先讲清楚:为啥要迁?要迁到哪?1.1 FPM 的痛点- 每个请求都要重新加载框架(Laravel 启动 30~80ms,Hyperf 启动后 0ms)- 不能保持长连…...

从Java全栈开发到云原生:一次真实的面试对话与技术剖析

从Java全栈开发到云原生&#xff1a;一次真实的面试对话与技术剖析 面试场景回顾 在一次真实的互联网大厂Java全栈开发岗位的面试中&#xff0c;面试官和应聘者展开了一场围绕技术栈、项目经验和系统设计的深入交流。面试官以专业严谨的态度&#xff0c;逐步引导应聘者展示其技…...

pod创建

Pod 由一个或多个紧密耦合的容器组成&#xff0c;它们之间共享网络、存储等资源&#xff0c;Pod 是 Kubernetes 中最小的工作单元&#xff0c;Pod 中的容器会一起启动和停止。1.创建pod一个pod只有一个业务容器kubectl logs mypod 命令用于查看名为 mypod 的 Pod 中唯一容器的标…...

第 2 篇:Agent 的三种工作模式,选错了事倍功半

系列简介&#xff1a;从零搭建一个多 Agent AI 助手&#xff0c;覆盖原理、实现、部署全链路。不讲空话&#xff0c;每篇都有可运行的代码。 项目地址&#xff1a;https://github.com/CodeMomentYY/LangGraph-Agent 本篇目标&#xff1a;理解 Agent 的三种工作模式&#xff0c;…...

为什么92%的Midjourney水效渲染失败?——解析v6.1+版本流体折射权重、noise scale与--s值的黄金三角关系

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;为什么92%的Midjourney水效渲染失败&#xff1f;——问题现象与根本归因 大量用户在使用 Midjourney v6 生成「水效渲染」&#xff08;Water Efficiency Rendering&#xff09;类提示词时遭遇高频失败——表现…...

Shutter Encoder:构建高效媒体工作流的FFmpeg图形化解决方案

Shutter Encoder&#xff1a;构建高效媒体工作流的FFmpeg图形化解决方案 【免费下载链接】shutter-encoder A professional video compression tool accessible to all, mostly based on FFmpeg. 项目地址: https://gitcode.com/gh_mirrors/sh/shutter-encoder 在数字媒…...

AI正在重构工程师岗位:被替代的不是“人”,而是低维度能力

过去很多人认为,AI更适合写文案、做客服、生成图片,而真正复杂的工程领域——尤其是工业、制造、自动化系统——依然离不开工程师。 但最近一个劳动仲裁案例,让越来越多工程技术人员开始重新思考这个问题: 一位从事测绘工作15年的工程师,因为企业全面导入AI自动化测绘系…...