众所周知,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中。
怎么样,是不是很神奇~~~
|