黑马程序员技术交流社区

标题: scanf函数大多数同学都不知道的小知识 [打印本页]

作者: sd6628611    时间: 2015-11-13 23:16
标题: scanf函数大多数同学都不知道的小知识

众所周知,scanf函数如果我们要接收一个字符串,在我们习惯的写法下:
char a[100];
scanf("%s",a);
如果我们输入Hello World,a接收到的值,只有Hello而已。因为,这种情况下,空格,tab,回车,都会成为这个字符串的结束标志。

但是我们可以用另外的一种写法来解决这种问题。
程序如下:
char a[100];
scanf("%[^\n]",a);
用到这个的人不多,但是%[]这个写法真的可以让scanf函数以自己定义的字符来作为结束符。比如%[^a]这样来接收字符串,那么就算是空格,tab和回车都会被接收到字符串当中,直到出现a并且按下回车为止。所以如果你的输入如下:
123  123120098900
123345  1123   a123877   1723749
那么你接收到的字符串只能有
123  123120098900
123345  1123   

^\n,在这里的意思是除了回车之外的意思。(\n是回车的意思,大家都知道,但是^是“除了”的意思我还真不知道,只知道有个意思是按位异或,网上查也没查到,就只能记住了。)所以这一句的意思是,接收除了回车之外的字符,所以空格和tap不再是结束的标志,自然就能接收带有空格和tab的句子了,直到你敲回车,这个句子才会停止并且读入到a中。


怎么样,是不是很神奇~~~
作者: huihui1030    时间: 2015-11-14 00:17
真不知道scanf还有这么多东西。。。学到了
作者: 韦德460    时间: 2015-11-15 09:29
回来我实践一下,确实不知道还有这样的用法
作者: liuchuan_alex    时间: 2015-11-15 09:38
学习了

作者: android_921    时间: 2015-11-15 10:03
之前都没注意到这个问题,感谢楼主
作者: 沐小妖mavs    时间: 2015-11-15 10:43
学习了 ,第一次知道还可以这么用
作者: 1170191405    时间: 2015-11-15 13:23
学习了!
作者: 海风眷恋的沙    时间: 2015-11-15 20:51
谢谢了 楼主.
作者: love阿木蛋花    时间: 2015-11-15 21:12
刷日常  谢谢
作者: 小贼船    时间: 2015-11-16 00:51
很全面的总结





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2