尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C语言:printf 与 scanf 详解:占位符、输出格式、返回值与赋值忽略符
【C语言学习笔记】printf 与 scanf 详解占位符、输出格式、返回值与赋值忽略符学习主题《从 C 语言到 AI 编程实践》本篇知识点printf 基本用法与不自动换行、占位符与参数个数对应、宽度 / 对齐 / 正负号 / 小数位 / 部分字符串、scanf 的读取原理与返回值、%c 与 %s 的空白处理、%s 越界、赋值忽略符一、printf 基本用法printf print f其中的f代表 format格式化表示可以定制输出文本的格式。它把参数文本输出到屏幕。#includestdio.hintmain(){printf(Hello World);return0;}输出Hello World。连写两个printf(Hello World);printf(hehe);// 输出Hello Worldheheprintf 不会在行尾自动换行运行结束后光标停在输出结束的位置不自动换行。想让光标到下一行开头要显式加\n。printf(Hello World\n);printf(hehe);// 输出两行如果漏掉#include stdio.hwarning C4013: printf 未定义假设外部返回 int error LNK2019: 无法解析的外部符号 printf函数 main 中引用了该符号 fatal error LNK1120: 1 个无法解析的外部命令这说明printf是库函数必须包含stdio.h头文件。二、占位符与参数个数占位符就是这个位置可以用其他值代入。printf(There are 3 apples\n);printf(There are %d apples\n,5);// There are 5 applesprintf(%s will come tonight\n,lisi);// lisi will come tonight参数与占位符是一一对应的有 n 个占位符printf的参数就应该有 n 1 个格式串本身算一个。个数不匹配时会输出内存中的任意值printf(%s says it is %d oclock\n,wangwu);// 少给了一个参数打印出内存中的随机值// wangwu says it is -4 oclock打印地址用%pinta10;printf(a的地址是: %p\n,a);// 类似 0000005B81AFBF42.1 常用占位符占位符对应类型%cchar%dint / signed int十进制%uunsigned int十进制%hd/%hushort / unsigned short%ld/%lulong / unsigned long%lld/%llulong long / unsigned long long%ffloatdouble 也可用%f也可用%lf%Lflong double%p指针打印地址%s字符串%x十六进制整数%zusize_t三、输出格式3.1 限定宽度与对齐printf(%d\n,123);//123printf(%5d\n,123);// 123 宽度至少 5 位不足补空格printf(%5d\n,123456);//123456 超过 5 位就按实际位数输出默认右对齐前面补空格在%后加-变成左对齐printf(----%5d----\n,123);//---- 123----printf(----%-5d----\n,123);//----123 ----浮点同理printf(%f\n,123.45);//123.450000 默认 6 位小数printf(%12f\n,123.45);// 123.450000printf(%-12f\n,123.45);//123.450000 3.2 总是显示正负号默认只给负数显示-加后正数也带正号printf(%d\n,12);//12printf(%d\n,12);//12printf(%d\n,-12);//-123.3 限定小数位数printf(%f\n,123.456);//123.456000printf(%.2f\n,123.456);//123.46printf(%6.2f\n,0.5);// 0.50 宽度 6保留 2 位宽度和小数位数都可以用*代替由参数传入intm6,n2;printf(%*.*f\n,m,n,0.5);// 0.503.4 输出部分字符串%.[m]s指定输出长度printf(%s\n,abcdefghi);//abcdefghiprintf(%.5s\n,abcdefghi);//abcde四、scanf 基本用法scanf读取键盘输入原型在stdio.h。程序运行到它时会停下等用户输入并回车然后把输入存入变量。intmain(){intscore0;printf(请输入成绩:);scanf(%d,score);printf(成绩是%d\n,score);return0;}// 请输入成绩:88// 成绩是88数据流键盘 →标准输入 stdin→ 程序变量 →标准输出 stdout→ 屏幕。一次读多个值inti0,j0;floatx0.0,y0.0;scanf(%d%d%f%f,i,j,x,y);// 输入 1 -20 3.4 -4.0e3输入多个值时数据之间用一个或多个空格、甚至换行分开都不影响——scanf处理数值占位符时会自动过滤空白字符空格、制表符、换行符。五、scanf 的读取原理用户的输入先放进缓存按下回车后才按占位符对缓存进行解读。解读时从上一次解读遗留的第一个字符开始直到读完缓存或者遇到第一个不符合条件的字符为止。intx;floaty;// 用户输入 -13.45e12# 0scanf(%d,x);// 跳过空格读 -13遇到 . 停止. 不是整数的合法字符printf(%d\n,x);// -13scanf(%f,y);// 从上次停下的 .45e12# 0 继续printf(%f\n,y);// 449999994880.000000理解从上一次遗留处继续这一点后面很多输入问题就解释得通了。六、scanf 的返回值scanf的返回值是成功读取的变量个数一个都没读到返回 0在读任何数据之前遇到错误或文件结尾返回常量EOF-1。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);输入结果说明10 20 4.5a10 b20 f4.500000r3三个都读到10 20 abca10 b20 f0.000000r2第三个不是数字10 #a10 b0 f0.000000r1第二个不匹配#a0 b0 f0.000000r0一个都没读到CtrlZ全 0r-1遇到文件结尾返回 EOF竞赛里的多组数据输入就靠返回值inta0,b0;// 只写一次 scanf输入多组时只会读第一组// scanf(%d %d, a, b);while(scanf(%d %d,a,b)2)// 读满两个才继续{printf(%d\n,ab);}也可以写成while (scanf(%d %d, a, b) ! EOF)。七、scanf 的占位符占位符说明%c字符%d整数%ffloat%lfdouble%Lflong double%s字符串%[]指定匹配的字符集遇到不在集合中的字符就停止printf 与 scanf 的%f差异printffloat用%fdouble用%f或%lf都行scanffloat用%fdouble必须用%lf。7.1 %c 不跳过空白除%c外所有占位符都会自动忽略起首的空白字符。%c总是取当前第一个字符哪怕它是空格。charn0;scanf(%c,n);// 输入 abc输出 读到的是空格本身scanf( %c,n);// 输入 abc输出 a格式串里的空格表示跳过空白要跳过空白就在%c前加一个空格。7.2 %s 与 %[]%s遇到空白字符空格、制表符、换行就停止chararr[20];scanf(%s,arr);// 输入 abc def只得到 abcprintf(%s\n,arr);// 注意数组名本身就是地址这里不用 想读带空格的字符串用字符集scanf(%[a-z],arr);// 输入 abcdefg1234 → abcdefg遇到不在 a-z 的字符停止scanf(%[^\n],arr);// 输入 abc def → abc def读到除换行外的所有字符八、%s 的越界与赋值忽略符8.1 %s 不检查长度%s读入字符数组时不检测是否超过数组长度很容易写越界chararr[5];scanf(%s,arr);// 输入 abcdefgh9 字节→ 栈被破坏// Run-Time Check Failure #2 - Stack around the variable arr was corrupted.正确做法是指定最大长度%[m]s。数组 5 个字节最多读 4 个留 1 个给\0chararr[5];// [][][][][\0]scanf(%4s,arr);// 输入 abcdefgh → abcd同样的坑还有类型不匹配inta0;floatf0.0;scanf(%d,a,f);// 少写了一个占位符// C4477 scanf: 格式字符串 %d 需要类型 int * 的参数// 但可变参数 1 拥有了类型 float *运行时会破坏栈占位符必须与变量类型、个数严格对应。8.2 赋值忽略符 %*c输入格式不固定时比如分隔符可能是-也可能是/intyear0,month0,day0;scanf(%d-%d-%d,year,month,day);// 输入 10-20-30 → 10 20 30正确// 输入 10/20/30 → 10 0 0分隔符不匹配后面全部失败两种修法。第一种用%c把分隔符吃进变量charc10,c20;scanf(%d%c%d%c%d,year,c1,month,c2,day);更简洁的是赋值忽略符*加在任何占位符的百分号后面该占位符照样解析但结果被丢弃。scanf(%d%*c%d%*c%d,year,month,day);// 输入 10-20-30 或 10/20/30都输出 10 20 30%*c就是读一个字符但不要它无论分隔符是什么都能跳过。九、本篇踩坑清单#坑现象正确做法1以为 printf 会自动换行两次输出粘在一起结尾加\n2漏写#include stdio.hC4013、LNK2019用库函数就包含头文件3占位符比参数多打印内存随机值如 -4占位符与参数一一对应4以为 scanf 能读完一整行只读到第一个空格用%[^\n]或fgets5%c前不加空格读到前导空格写 %c6double用%f输入结果错乱scanf 里必须用%lf7%s不限长度Run-Time Check Failure #2栈被破坏写%4s留一位给\08scanf 占位符与变量类型不符C4477运行时破坏栈类型、个数严格对应9用scanf(%d-%d-%d)固定分隔符输入用/就失败用%*c吃掉分隔符10多组输入只写一次 scanf只处理第一组while (scanf(...) 2)十、小结printf不自动换行占位符个数 参数个数 − 1少给参数会打印内存随机值输出格式可以组合宽度%5d、左对齐%-5d、正负号%d、小数位%.2f、部分字符串%.5s宽度和精度还能用*从参数传入scanf按缓存解读、从上次遗留处继续返回值是成功读取的个数多组输入靠它判断%c不跳空白、%s遇空白即停且不检查长度——前者要加空格后者要写%4s这类上限分隔符不确定时用%*c忽略。标签C语言printfscanf占位符输入输出学习笔记
RELATED

相关推荐

artcraft工作流:用工程化手艺支撑创意表达,从素材库到反馈闭环

artcraft工作流:用工程化手艺支撑创意表达,从素材库到反馈闭环

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个词,我脑子里蹦出来的不是某个具体工具,而是一种很朴素的冲动——把“art”和“craft”捏在一起。艺术负责表达,手艺负责落地。很多做创意、做设计、…

📅 2026/10/21 9:02:31
从镜像构建到环境晋升:容器化项目交付流水线完整拆解与实战排障

从镜像构建到环境晋升:容器化项目交付流水线完整拆解与实战排障

交付流水线这个词,理论上讲的是从代码提交到镜像晋升的全链路自动化。但真正在项目里把这条链路跑顺,你会发现很多细节根本不是文档里写的那样——webhook 触发重复了、缓存把旧代码带进了新镜像、tag 晋升完才发现 digest 不一致,几天排查下…

📅 2026/10/21 9:02:31
AI英语学习系统技术架构:从大模型接入到语音评测与自适应复习的完整落地

AI英语学习系统技术架构:从大模型接入到语音评测与自适应复习的完整落地

上个月我接过一个英语学习产品的技术方案评审,团队反复在纠结“大模型到底选哪家”。聊到第三轮,我反而把话题拉了回来:一套AI英语学习系统能不能用,大模型只是其中一个环节,语音评测走不走得通、复习算法准不准、数据…

📅 2026/10/21 9:02:31
MORE NEWS

更多资讯

📰

搜索结果里的官方入口也可能是假的:从仿冒 Claude 安装页谈 AI 工具下载链路的验证习惯

搜索结果里的官方入口也可能是假的:从仿冒 Claude 安装页谈 AI 工具下载链路的验证习惯 一个“看起来很官方”的入口,为什么不可信 很多工程师有一个根深蒂固的习惯:认准“官方来源”。这个直觉通常是对的,但它的判断标准往往停…

📰

计算机毕业设计 | SpringBoot 学生成绩管理系统 教务管理系统(附源码)

1,项目背景 随着我国高等教育的发展,数字化校园将成为一种必然的趋势,国内高校迫切需要提高教育工作的质量与效率,学生成绩管理工作是高校信息管理工作的重要组成部分,与国外高校不同,他们一般具有较大规模…

📰

如何获取某地高/低叶面积指数?

叶面积指数 LAI(Leaf Area Index),表征单位地表面积绿叶总面积,是植被生态、光伏 / 风电辐射衰减、陆面水文仿真、新能源资源评估的关键参数;羲和平台依托 MERRA-2/ECMWF 数据集,内置植被分类下的 LAI&…

📰

AI视频怎么做超分辨率增强?逐帧处理、画幅控制与音画验收

一段 AI 生成的竖屏短片,剪辑和字幕都完成了,导出时却发现源片只有 448768。直接把编码尺寸改成 10801920,文件确实会变大,画面却不会因此获得真实细节;如果逐帧交给增强模型,又会遇到画幅变化、处理耗时、…

📰

彭大帅的AI运维助手——用AI Agent巡检9节点OpenStack生产集群

从自然语言提问到值守告警闭环:一次可复现的实战记录 9节点(3控制3计算3Ceph) VIP 高可用入口 含四组端到端故障演练的完整时间线 连巡检探针自身的缺陷也是演练抓出来的 目 录 第一章 场景:谁来巡检一个9节点集群 第二章 交接…

📰

手术显微镜研发06:支架、平衡与制动,如何让高倍视野稳得住

在高倍观察下,微小抖动、漂移和姿态变化都可能明显放大。显微镜支架也不是一根承重杆,而是平衡、制动、运动、底座和附件共同构成的机械系统。本文围绕重心、力矩、工作包络、稳定时间及失电状态,讨论如何把展台上“移动轻便”的体验转成可验…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬