当前位置:首页 » 《资源分享》 » 正文

<C语言>| 关于scanf读取缓存区的理解_GuLeng______的博客

22 人参与  2021年10月08日 16:03  分类 : 《资源分享》  评论

点击全文阅读


文章目录

  • 前言
  • scanf函数的定义:
  • 功能:执行格式化输入
  • 总结
  • 解决方法

前言

在牛客做了很多坑爹的题,明明代码没问题但是就退无法AC,看了很多题解之后,发现是scanf读取缓存区,在输入输出时出现了问题 于是写个博客总结一下

首先我们要了解什么是 scanf 函数

根据 cplusplus.com的解释
请添加图片描述

scanf函数的定义:

scanf()函数是通用 终端格式化输入 函数,它从标准输入设备(键盘)
读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为:
scanf("<格式化字符串>",<地址表>);

功能:执行格式化输入

并且注意:scanf()函数返回成功赋值的数据项数,出错时则返回EOF。

当进一步深挖之后(暂时不需要知道原理,只需要知道结果即可),
可以得到这样一个认识:
键盘输入的东西并没有直接给scanf读取 而是在缓冲区进行暂时存放
比如这样一段代码:
#include <stdio.h>
int main()
{
int a, b, c, d, e;
scanf("%d %d %d %d", &a, &b, &c, &d);
printf("%d %d %d %d\n", a, b, c, d);
scanf("%d", &e);
printf("%d\n", e);
return 0;
}

预期:1 2 3 4

​ 1 2 3 4

​ 5

​ 5

但是如果你这样输入: 1 2 3 4 5

会输出 1 2 3 4

​ 5

这是因为scanf以回车键为信号,去缓冲区进行读取数据,只要数据的格式符合标准,那么就可以正确读取,否则就要等待继续输入/读取失败

总结

通过查阅网站我们知道了,scanf函数是标准输入流(从键盘接收数据),接收的数据放入输入缓冲区中,其中就包括在键盘输入的空格、回车这类字符,

但是!!!

当你用%d接收时是不会影响的,但是用%c就会产生错误,这是因为在"%c"输入时,空格和转义字符均被视为有效字符会被%c接收。从而导致输出错误,无法AC

解决方法

  1. List item

可以再%c前 键入一个空格 (优解)

eg:scanf(" %c",&a);

这里 %c前面加上空格键 可以消除前面所有的空白字符(输入的时候就会消化掉这个\n) 从而 不需要使用getchar()去吞\n

并且不会为下次留下空白字符的隐患

  1. 使用getchar()去吞掉缓存区中的\n
while(ch=getchar()!=EOF)

​		getchar();

使用getchar(); 去吞掉缓存区中剩余的 ‘\n’ ,从而使程序可以正常运行

欢迎大家点赞,评论,指出不足与错误。

共勉


点击全文阅读


本文链接:http://zhangshiyu.com/post/29574.html

输入  函数  读取  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 爱似霜雪化无痕附加(爱似霜雪化无痕)(靳绍言虞芮)全本浏览阅读连载中
  • 此生恩怨皆已了,愿来世两不相逢最新试读_何井野丁蓉妹妹最新目录_小说后续在线阅读_无删减免费完结_
  • 春风也醉我痴心超长版_夏廉陆芸顾知知好评_小说后续在线阅读_无删减免费完结_
  • 前传一别经年何如故续集:全文+番外周瑾年陈柚一:结局+番外新上热文
  • 坐了一次副驾老婆的小助理就让我跪下道歉(宋云澜孟岚)_坐了一次副驾老婆的小助理就让我跪下道歉
  • 全书浏览他的怀孕女秘书上门逼宫后,我闪婚偏执小狼狗免费(陆枫)_他的怀孕女秘书上门逼宫后,我闪婚偏执小狼狗免费(陆枫)全书结局
  • 网恋被甩后他成了全网初恋小说(裴知穗季延琛)(网恋被甩后他成了全网初恋)在线畅读阅读连载中
  • 靳绍言虞芮小说完本+外篇(爱似霜雪化无痕)畅享阅读
  • 温媛傅寒燚是什么小说(认错白月光后,我惨死,他哭疯)(温媛傅寒燚)全本完整清爽版在线+无广告结局
  • 为哄白月光开心老婆亲手砍断九尾狐的八尾,我离开后她悔疯了章节目录_沈清九尾狐陆景最新目录_小说后续在线阅读_无删减免费完结_
  • 为我拍下遗照后,他却后悔分手了一口气完结_阎王江城老白故事会_小说后续在线阅读_无删减免费完结_
  • 鹿闻笙沈卿尘小说(鹿闻笙沈卿尘)+前传(鹿闻笙沈卿尘)阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1