c语言——详解scanf

目录

基础概念

接收内容

&是什么,可以不加&吗?

scanf中可以用\n吗?

如何吸收scanf留下的回车?


基础概念

  • scanf是从标准输入设备(如键盘)接收内容的函数。可以接收的类型和内容十分广泛(如整型,浮点型,字符型...)。
  • 使用格式(假设接收整型变量a):scanf(“%d”,&a);

接收内容

  • 常见占位符(因为这个博客是我自己的所以不用在意版权问题)

http://t.csdn.cn/2HTIa

  • 输入的内容必须和引号内的完全一致。下方给大家举一些栗子🌰
    scanf("%d %d",&a,&b);
    //两个占位符之间有个空格,所以运行时输入的两个数字之间也要用空格隔开
    
    scanf("%d,%d",&a,&b);
    //两个占位符之间有个逗号,所以运行时输入的两个数字之间必须用逗号隔开,用空格就不行
    
    以上两个是常规的,下面有两个易错点————————————————————————————————————————————
    
    scanf("%d%d",&a,&b);
    //如果两个占位符之间啥也没,运行时输入的两个数字之间要用空格或者回车键隔开。如果连续
    输入两个数字只会被视作一个十位数,程序会等待用户输入下一个数字
    
    scanf("a=%d",&a);
    //这种情况必须连同“a=”一块输入才行,很容易搞错,所以一般不建议这样输入

    &是什么,可以不加&吗?

&其实是一个取址运算符,&a表示变量a的地址(变量地址会在指针具体涉及)。变量a的值和变量a的地址完全是不同的两个数字,所以scanf中的变量前面没有加&会运行异常。

但是printf中反而不需要用到&,如果printf中用了&,输出的就不再是变量的值,而是变量的地址。

 如图中那一串很长的数字就是变量地址。

scanf中可以用\n吗?

答案是不可以。

\n的意思是回车,通常在printf中使用(也可以当作字符使用)。

假如使用scanf时加了\n,或者占位符后方有空格,输入一个数字之后,按回车,这时候并不会进行下一步。程序会一直等待用户再次输入一个不是空格/回车的东西,然后再按下回车键才能继续运行,而结果真正识别的只有第一个数字。如下

如图大家可以看到,中间我输入很多回车程序也没法继续运行,直到输入另一个数字。接下来printf输出的结果只有第一个数字。

🔎正常情况下scanf会在缓冲区读取内容,直到我们输入回车键为止,那这里为何会异常呢?

首先我们引用一个教材知识:当scanf在格式串(就是scanf中引号里的内容)中遇到一个或者多个空白字符(空白字符是空格或者回车),scanf函数会从输入中重复读取空白字符,直到遇到非空白字符。

也就是说scanf在格式串中遇到的\n或者空格就是空白字符,接下来scanf函数会重复读取你输入的回车,直到你再输入一个数字为止。

综上所述,scanf不需要回车或者空格。

如何吸收scanf留下的回车?

在scanf后面使用getchar();或者gets();或者scanf("%c")。

 就酱,拜拜

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值