C/c++关于sscanf的一个小问题

#include"stdio.h"
#include"stdlib.h"
int main()
{
	char x[1000]="\0";
	scanf("%s",x);
	 char w[100];
    sscanf(x,"%[^!]",w);
    puts(w);
}

当输入

123455!321

sscanf遇到!不结束

这是为什么?

结束啊,scanf("%s",x)这里,x里面的东西是123455!321,sscanf(x,"%[^!]",w)这会把!之前的拷贝给w,w中的内容是123455。我这里的运行结果如下:(你注意在输入!的时候,别输入中文的!了,输入中文的叹号是不会结束的)