先看一小程序:
#include <stdio.h>
int main()
{
const char* s = "hello/Yulay@122";
char buf[20];
sscanf( s, "%*[^/]/%[^@]", buf );
printf( "%s\n", buf );
return 0;
}
结果为:Yulay
总结:
%*[^/]:读入一个不是‘\’ 字符串,遇到该字符停止,但是该字符串不保存到变量里,也就是把其舍去;
%[^@]:读入一个不是‘@’字符串,遇到该字符停止,但是该串保存到变量里。
再如:("%*c%*[^\n]");
这条语句中%*c表示, 读入一个字符,但是这个字符不保存到变量里,所以后面不需要有对应的char型的参数。%*[^\n]表示读入一个字符串,字符串里的字符只能是由[]里指定的字符,并且这个字符串也不保存。假如是%*[abcd], 只能输入abcd所组成的字符串,如aabbddcc,如果遇到其他字符,scanf函数就会返回。
这里是%*[^\n], ^表示“非”的意思, \n是换行, %*[^\n]表示读入所有不是换行的字符。
所以 scanf("%*c%*[^\n]");表示,读入一个字符,再读入一串不是换行的字符,这些都不保存,然后返回。
其实就是,跳过一行的意思。