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中。


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

评分

参与人数 2技术分 +1 黑马币 +6 收起 理由
Micro + 1 赞一个!
仰望的繁华 + 6 赞一个!

查看全部评分

8 个回复

倒序浏览
学习了。。。
回复 使用道具 举报
这个真不错
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
好奇,来看看
回复 使用道具 举报
真的是很神奇 哦
回复 使用道具 举报
黑给力啊,版主应该奖励技术分的
回复 使用道具 举报
guyinghua901018 来自手机 中级黑马 2015-4-2 13:02:26
8#
感谢各位支持
回复 使用道具 举报
受教。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马