[C.C++] 【C语言】小知识点——scanf中的%c

855 0
Honkers 2025-4-29 18:29:31 来自手机 | 显示全部楼层 |阅读模式

遇到如下代码的时候会有这个现象

  1. scanf("%d",&a);
  2. scanf("%c",&b);
复制代码

我们的本意是让程序读取一个数字和一个字符,然后你输入10(回车),然后发现程序已经流过scanf("%c",&b);这一句了,我们发现变量a存的是10没问题,但是变量b存的是一个回车。这是咋回事?

C语言的输入有这么几个特点:

  1. 有一个输入的缓冲区
  2. 在进行输入的时候,所有输入的字符(包括空格、换行)都先被放到缓冲区中,直到按下回车,这是'\n'进入缓冲区,同时开始读取字符。
  3. scanf匹配到一个字符,就会在缓冲区中删掉这个字符
  4. scanf 函数在读取整型数、浮点数、字符串 时会忽略\n’(回车符)、空格符等字符 (忽略是指 scanf 函数执行时会首先删除这些字符,然后再阻塞)。
  5. scanf在读取%c的时候不会忽略任何字符

所以执行上面那一段程序的时候发生了这么些事情

所以为了避免出现这种情况,如果要读取%c的时候看看需不需要清空标准输入缓冲区fflush(stdin);

然后如果同时接收多个输入的时候混着%c的时候就要注意,比如说scanf("%d %c")的时候,你输入3 x(回车)就是OK的,因为3被%d读取到了,3和x之间的空格也被"%d %c"之间的空格匹配上了,所以从标准缓冲区中删掉了,然后剩下的x就被%c匹配到了。但是如果你scanf("%d%c")的情况下输入3 x(回车),那么x里面就是空格。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行