A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


众所周知,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中。


怎么样,是不是很神奇~~~

10 个回复

倒序浏览
真不知道scanf还有这么多东西。。。学到了
回复 使用道具 举报
回来我实践一下,确实不知道还有这样的用法

点评

实践  发表于 2015-11-15 10:04
回复 使用道具 举报
学习了
回复 使用道具 举报
之前都没注意到这个问题,感谢楼主
回复 使用道具 举报
学习了 ,第一次知道还可以这么用
回复 使用道具 举报
学习了!
回复 使用道具 举报
谢谢了 楼主.
回复 使用道具 举报
刷日常  谢谢
回复 使用道具 举报
很全面的总结
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马