关于gets()与scanf()输入字符串与\0,\n,空格之间的问题

我们都知道输入字符串的话,用gets()函数与scanf()加%s的话都是可以的。同时,一个字符串的结尾默认有一个\0也是老生常谈。

空格

gets()

1. 当gets()碰到空格时就把它当成一个普通的字符来看,没有任何特殊之处可言。

scanf()

1. 如果再输入过程中间有空格的话,那么它只读取空格前面的字符,碰到空格的话就到此为止了,接下来不再下去了。

2. 就算是最后输入空格,也是一样,反正就是碰到空格的话就停下来不再继续读取,同时这个空格这个字符是不包括在内的。

接下来对于\n与\0,需要知道的是:你手动输入的\0与\n与真正的字符串末尾的\0、按下一个回车键导致往输入缓冲区里面放进去的\n这两者的话是有区别的。对于你手动输入的那些,编译器会把它看成两个字符

\n

1. 我们都知道,当敲一下回车的时候,就相当于输入缓冲区里面放入一个\n.

2. 但是当我们自己在输入中的时候,自己手动输入的一个\n,编译器不会把这个\n当成回车的那个,还是会把它解读成两个字符,这个对于gets与scanf两者相同。

两个注意点:

1. 对于最后输入回车然后放到输入缓冲区里面的那个\n,两者的处理方式就有不同。scanf()是读取那个之前的字符,然后那个\n就仍然留在输入缓冲区里面,这也因此导致可能需要清理输入缓冲区。而gets()会把最后敲进去的那个\n自动给扔出来。

2. 对于scanf输入完之后,如果没有清空缓存区的话,这时候输入缓冲区一个字符就是\n,无论接下来有gets函数还是scanf读取新的内容,首先不可避免的会先读到\n,一旦读到这个“货真价实”的\n,那么就直接回车\换行了。

 

\0 

1. 通过监视也不难发现,当在输入过程中,自己手动输入一个\0,编译器会把它解读成两个字符。

一个注意点:

1. 我们都知道,字符串的末尾默认带有一个\0,但是当从输入缓冲区里面读取字符串的时候,人为的并没有输入\0,但是从上面那么多的监视当中不难发现,编译器会在最屁股后面自动会补上一个\0。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

絕知此事要躬行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值