进一步理解scanf()的输入

3 篇文章 0 订阅
订阅专栏
本文详细解析了scanf()函数在C语言中的工作原理,包括如何处理空白字符、连续数字读取和非数字字符处理。通过实例演示了输入过程,并讨论了%d读取非数字字符的情况。关键概念包括输入缓冲区管理和错误处理。
摘要由CSDN通过智能技术生成

1、scanf()工作原理

scanf()根据一个%d读取一个数值,每次读取前都跳过数值前的所有空白字符(空格、tab、换行符),直至遇到非空白字符才开始读取。因为要读取整数,当scanf()找到数字或者+-号时,会把它保存下来并继续读取下一个数字,如果数字是连续的就一直读取并保存。如果遇到空白或者其他非数字字符,scanf()会认为读到了整数的末尾,然后把非数字字符放回输入,这意味着程序在下次读取输入时首先读取到的是上一次被放回输入的非数字字符。

2、详细的输入过程

写一条C语句:scanf("%d%d%d", &a, &b, &c); 输入下面内容

1   22
3

首先scanf()读取第一个%d,读取到1然后遇到空格,读取结束并把空格放回输入里。接着开始读取第二个%d,读取前跳过输入里的全部空格(3个),读取到2和2并保存,遇到换行符读取结束并把换行符放回输入,读取第三个%d,跳过被放回输入里的换行符,读取3,最后读取结束并把换行符放回输入。如果这个程序下面还要scanf(%d),留在输入里的这个换行符会被跳过,如图1。但如果用用scanf(%c),这个换行符就会被读取到并赋值给对应的变量。如下面图2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP5qCH,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP5qCH,size_20,color_FFFFFF,t_70,g_se,x_16

 3、%d读取到非数字字符

如果%d读取到的第一个不是数字而是字母a,scanf()会停在那里,并把字母a留在输入缓冲区中,不会把值赋给指定变量,然后程序在下一次读取输入缓冲区时首先读取到的还是a。如果程序之后还是只使用%d来读取,那么scanf()就一直无法读取整数并赋值,a会一直留在在输入缓冲区中。另外,如果使用多个带转换说明的scanf(),scanf()会在第一个出错的地方停止读取输入。

例如下面这段程序,输入字母d,scanf()不会给变量a赋值(a还是原来的值),而会把字母d放回输入缓冲区,在下一次%c读取的时候把字符d赋值给变量b。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bWM5YWl5byP5qCH,size_15,color_FFFFFF,t_70,g_se,x_16

最后:这篇笔记是在C primer plus的基础上加上自己的理解写出来的,可能会有不准确的地方,如果有错希望大佬可以指正。

参考资料:C primer plus(第6版)

C语言_scanf函数使用过程中遇到的问题及思考
Natsunobourei的博客
10-03 2030
本篇博客用于记录我在使用scanf函数的过程中遇到的问题以及思考。
STM32的UART串口2Printf输出和scanf输入(STM32神舟IV号-库函数版)程序,亲测能用
11-25
本文将深入探讨如何在STM32中利用库函数实现UART2的Printf输出和scanf输入功能。 首先,理解UART2的基础知识至关重要。UART是一种异步串行通信接口,通过数据位、起始位、停止位和奇偶校验位来传输数据。STM32的...
C语言scanf函数与空格回车
水逝流年
11-08 2万+
众所周知,C语言中的scanf函数的作用是从标准输入设备(通常是键盘)读取输入值,并存储到参数列表中指针所指向的内存单元。下面从几个方面说一下一些稍微细节的东西。下面的实验都在vc6.0中通过。 1、scanf的返回值 scanf通常返回的是成功赋值(从标准输入设备赋值到参数列表所指定的内存区域)的数据项数,如果出错或是遇到end of file(注意,如果想从键盘输入EOF,在windows
C语言-关于C语言运行在scanf语句换行输入
2301_80480761的博客
11-19 1866
1.在scanf语句中只要设置一个坐标(如:%f %d等)在输入的时候就可以输入一个数据就换行一次,到最后坐标全都赋值后,再按Enter键来运行结果。2.在scanf语句中尽量不要用\n符,因为容易运行错误,导致最终无法调用函数,结果无法输出。
[C语言]scanf函数的格式解析和输入匹配规则
2301_78510605的博客
02-18 2874
使用`%[]`格式控制符可以指定匹配的字符范围,也可以使用'^'来排除指定字符范围。'、'@'、'#'、'%'、'&'、'*' 等。- 数字字符:'0'、'1'、'2'、...、'9'- 大写字母:'A'、'B'、'C'、...、'Z'- 小写字母:'a'、'b'、'c'、...、'z'- 标点符号:','、'.'、'?3,□□□4,□5 ↙(输入a,b,c的值)- 括号:'()'、'[]'、'{}' 等。3,□4,□5 ↙(输入a,b,c的值)3,4,5 ↙(输入a,b,c的值)③ 3(tab键)4↙。
C 程序设计教程(10)—— 数据输入函数(scanf)用法详解
热门推荐
睿思达DBA
01-09 2万+
scanf 函数的用法
关于scanf换行符的问题
firefly
08-16 1万+
scanf在读取字符串时,会自动忽略换行符,所以char ch,a[10],b[10]; scanf("%s",a); scanf("%s",b); printf("%s",a); printf("%s",b);当输入abc回车def时,输出abcdef但是换行符还是留在缓冲区中,所以我们在scanf后面应该加上一行getchar();来去掉残留的换行符特别地: sc
如何处理并理解scanf函数返回值通常会被忽略的情况?
最新发布
10-18
- 返回值等于0,这可能是正常的,因为用户可能没有输入任何东西(如空格),或者输入了非预期的数据,这时需要进一步检查实际读取的内容。 - 若返回值小于0,这意味着发生错误,可能是因为遇到了格式错误、文件结束...
scanf的用法
09-22
### scanf函数详解 #### 一、函数概述 `scanf`函数是C语言中用于从标准输入设备(通常是键盘)读取格式化数据的一种方法。...通过上述详细说明,希望读者能更好地理解和掌握`scanf`函数的使用方法及其细节。
C语言教程:scanf函数输入多个数据详解
"这篇资源是关于C语言的教程,特别关注使用`scanf`函数来输入多个数据。内容来自浙江大学的课程,适合初学者,强调了理解C语言的基础知识、算法和编程实践。教程中提到了一些重要的C语言教材,并按照章节介绍了C语言...
scanf与键盘输入的交互原理
在使用scanf函数时,需要使用格式化字符串指定输入的数据类型,以便正确读取用户输入的数据。常见的格式化字符串包括: - `%d`:读取整数 - `%f`:读取浮点数 - `%c`:读取单个字符 - `%s`:读取字符串 - `%x`:读取...
关于C语言scanf函数换行符\n的读取问题概论
m0_55653575的博客
10-24 1万+
首先针对于scanf函数能否读取换行\n这个问题 我们需要区分不同情况展开讨论 1.如果我们读取的是数字类型 单纯根据上述程序内容,我们需要输入一个数字 并且赋值给 整型变量 a,然后输入字符并且赋值给c。(最后一行打错了应该是printf(”%d\n%c\n“,a,c)) 我们不妨输入格式为 5 z(就是一个数字5加换行加一个字母c) 这个时候输出的结果就是 前两个5z是我输入的结果,可以看到,虽然我有输入换行符,但是却并没有被第二个 scanf函数读取并且赋值给字符变量c 在.
C语言 scanf
2301_76445610的博客
07-30 729
scanf的第一个参数是一个格式字符串,里面会放置占位符,(和printf()的占位符基本一致),告诉编译器如何解决用户的输入,需要提取的数据是什么类型的。这是C语言的数据都是有类型的,scanf() 必须提前知道用户输入的数据类型,才能够处理数据。不论是scanf还是printf,都对类型很重要有多少个占位符就有多少个变量——printf和scanf同理!scanf的原型定义在头文件,stdio.h。
C语言运行时实现换行输入数据
Lost_dream_man的博客
10-13 1万+
c语言 实现在运行程序输入数据时候换行输入 scanf("%d,%d\n",&a,&b); scanf("%d",&d); 只需要两个scanf连一块,第一个scanf%d后加换行符\n 即可输入俩个数据后enter换行输入第三个数据最后enter运行 ...
新手使用scanf()最最最最容易遇到的问题,根据自己的经历做点总结
2203_75284620的博客
04-09 1008
scanf() 用了这么久了 才发现不理解它的这些陷阱,以后在了解就来不及了啦, 赶紧上车。
C语言输入函数scanf在使用中不能加上换行符号\n
Yskm_sir的博客
02-25 4573
C语言中容易让你错误和混淆的点:C语言输入函数scanf在使用中不要加上换行符号\n
使用scanf()
WQ的博客
02-28 1464
如果用scanf()读取基本变量类型的值,在变量名前加上一个&; 如果用scanf()把字符串读入字符数组中,不要使用&。 //input.c -- 何时使用& #include <stdio.h> int main(void) { int age; float assets; char pet[30]; printf("Enter your age,assets,and favorite pet.\n"); scanf("%d %f",&ag
scanf里面使用换行符\n?scanf(“%d\n“,&a);
Zac2021的博客
04-23 569
scanf中 “\n” 不是表示接受一个回车符,而是表示忽略所有的空白字符(包括回车,空格,tab )。所以想要结束输入,输入任意一个非空白字符即可,但是该字符仍然会留在缓冲区中。原文链接:https://blog.csdn.net/mengyuying16/article/details/51923576。如果说,使用了 “\n”,希望变量a,b存入的数值是每个scanf输入的第一个数字的话,可以清除缓存。一般不建议在 scanf中使用“\n”。
写文章

热门文章

  • Linux文件的打包和压缩(tar命令) 50403
  • 树莓派64位系统(Linux)部署yolov5 12354
  • 固态硬盘、机械硬盘、RAM、ROM的区别和联系 9918
  • 树莓派32位系统烧录及连接 3703
  • 校招详解(术语、时间、流程) 3193

分类专栏

  • C语言笔记 3篇
  • Linux基础 5篇
  • 年度总结 2篇
  • 算法 2篇
  • 蓝桥杯C++

最新评论

  • malloc的底层原理和流程

    CSDN-Ada助手: 不知道 Java 技能树是否可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • Linux的启动过程(嵌入式SoC)

    dujunqiu: 我还一直奇怪linux系统怎么跳到uboot里面来执行的,原来是通过BIOS和拔码开关来选择的表情包

  • 图解爬楼梯问题的递推公式,一看就懂

    baihuaconglin: 一目了然

  • 校招详解(术语、时间、流程)

    CSDN-Ada助手: 恭喜您写下了第19篇博客《校招说明书》,持续保持创作的热情和努力,让更多的读者受益于您的分享。希望您在未来的创作中可以更深入地挖掘校招的相关主题,比如分享自己的求职经历、面试技巧等,让读者能够更好地应对校园招聘。期待您的更多精彩文章!

  • 图解爬楼梯问题的递推公式,一看就懂

    CSDN-Ada助手: 恭喜用户写出了如此详细图解的博客,让爬楼梯问题的递推公式一目了然。希望用户能够继续坚持创作,分享更多有趣且易懂的内容。建议用户可以尝试探讨一些实际应用场景下的数学问题,或者分享一些解决技术难题的心得体会,相信会吸引更多读者的关注。期待用户更上一层楼,创作出更多精彩的博客!祝用户写作愉快!

最新文章

  • malloc的底层原理和流程
  • 校招详解(术语、时间、流程)
  • 图解爬楼梯问题的递推公式,一看就懂
2024年7篇
2023年4篇
2022年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家安徽欧式玻璃钢雕塑定做价格如皋玻璃钢雕塑定做乌鲁木齐玻璃钢造型雕塑江苏水果玻璃钢雕塑方法无锡拉丝玻璃钢雕塑信息推荐亳州多彩玻璃钢雕塑郑州泡沫玻璃钢雕塑公司临沧市玻璃钢雕塑设计供应安顺玻璃钢雕塑定制商场美陈整改方案深圳商场美陈研发公司上海通道商场美陈价钱临沧商场美陈展示玻璃钢卡通唐老鸭雕塑玻璃钢雕塑摆件采购济源不锈钢人物玻璃钢彩绘雕塑南充成都商场美陈公司巨鹿玻璃钢雕塑广场玻璃钢雕塑生产厂家野猪玻璃钢雕塑玻璃钢雕塑加工 珠海商丘园林玻璃钢人物雕塑公司人物玻璃钢雕塑价格丹阳商场开业美陈单县制作玻璃钢雕塑商家厂商什么花种在户外玻璃钢花盆玻璃钢鹿雕塑哪家好杭州商场美陈哪里有陆军雕塑玻璃钢寿光玻璃钢蔬菜雕塑制作商香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化