文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言中scanf函数的原样输入的坑及解决

2024-04-02 19:55

关注

scanf函数的原样输入的坑及解决

scanf函数是C语言里一个输入函数,但其有很多地方需要注意:

1、scanf函数格式控制后面输入

的应该是变量的地址而不是变量本身(即变量名)

例,输入a,b 两个整型变量的值的时候,很多初学者会写成

scanf("%d %d",a,b)

这样写是错的,应该写成

scanf("%d %d",&a,&b)

2、scanf函数的输入是有顺序的

例如:

scanf(“%d %d”,&a,&b)

第一个%d是属于a的,第二个%d是属于b的

3、最重要的一点就是scanf切记要原样输入

即:

scanf(“a = %d,b = %d”,&a,&b);

输入的是时候应该写成“a = 1,b = 2”,记住逗号都要原样输入。

若是这样的话;

scanf(“a = %d b = %d”,&a,&b);

这样的话就要写成“a = 1 b =2”就连空格都要原样输入

总之一句话,除了占位符%d,%f,%lf等之类外的其他所有东西都要原样输入,包括空格,逗号

4、还有一个

如果scanf("%d %d %d",&a,&b,&c);,那么这时候可以在输入界面输入一个再按回车再输入下一个这样也是可以的,也可以按照这个格式在一行中进行原样输入。

总之中间有空格的就用空格隔开,如果是逗号的就用逗号来隔开,如果什么都没,即连在一块的话就按照输入格式输入即可。

scanf输入多个数据出现的问题

问题引出

如果使用scanf函数一次输入多个数据,只能是整型和浮点型,如果有char字符型混合输入,就会出现问题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OJapclT-1607332110976)(Pasted%20Graphic.png)]

图中可以看到:num3的值并没有打印出来,出现这种情况的原因是什么呢???

执行原理

让我们先大概的过一下里面的执行原理:

程序分析

我们来分析下面的一段程序:程序中要求用户输入一个整型数据num1,但是这个时候我们偏偏输入两个整型数据10、20,这个时候缓冲区其实有四个数据:10、空格、20、换行,执行第一个printf后结果为10,这是我们事先预料好的;当第二个scanf执行的时候,程序根本就不会让用户输入数据,因为缓冲区中已经有整型数据20了【当从缓冲区中拿数据的时候,如果要拿的数据的类型是整型或者实型,如果拿到的数据的类型是空格、回车、Tab键,就会被自动忽略,继续往下拿】,所以最终程序会直接打印出num2=20

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uSu3YfSK-1607332110978)(Pasted%20Graphic%201.png)]

让我们再回头看第一个程序:为什么num3的值打印出来的结果为空???

执行完第11行程序以后,缓冲区中的数据为10、空格、2.5、空格、a、换行;打印num1、num2的值的时候,因为是整型或者浮点型,程序会自动忽略空格和换行,所以输出结果为num1=10,num2=2.500000;但是num3是一个字符型的数据,程序并不会忽略任何的数据,最后打印出来的结果为num3= ;【这里打印出来了一个空格,并不是空】

解决方案

那这个时候就有问题了,如果scanf输入多个数据中包含字符型数据时,我就是想要输出来字符型数据,该怎么做呢???

解决方案:通过rewind(stdin);这行代码把缓冲区中的数据全部清空,这个时候缓冲区中没有任何数据了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9UNqDCfl-1607332110979)(Pasted%20Graphic%202.png)]

写C代码时,如果遇到整型、浮点型、字符型同时出现在scanf函数中的时候,要十分注意缓冲区中数据的情况!!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯