[]內是匹配的字符,^表示求反集,當遇到非集合內的字符時立即終止輸入
1. 輸入指定范圍的小寫字母,遇到非法字符立即終止
scanf("%[a-z]",str1);
printf("%s\n",str1);
輸入:abc123
輸出:abc
//輸入帶空格的自定范圍的字符串
scanf("%[a-z A-Z0-9]", str1);
printf("%s\n",str1);
輸入:abc123 def 456
輸出:abc123
scanf("%[a-z0-9]", str1);
printf("%s\n",str1);
輸入:abc123
輸出:abc123
2. 輸入不包括指定字符的字符
scanf("%[^a-z]", str1);
printf("%s\n",str1);
輸入:123 456abc123
輸出:123 456
注意:這種方式可以讀入空格
scanf("%[^\n]", str1);
printf("%s\n",str1);
//讀入一整行字符串,包括空格
輸入:abc123 def
輸出:abc123 def
scanf("%[^a-d0-9]", str1);
printf("%s\n",str1);
輸入:efxy89
輸出:efxy
我們來看看百分號表示什么意思:
%表示選擇,%后面的是條件,比如"%s",s是一個條件,表示任意字符,"%s"的意思是:只要輸入的東西是一個字符,就把它拷貝給str。"%3s"又多了一個條件:只拷貝3個字符。 “%[a-z]”的條件稍微嚴格一些,輸入的東西不但是字符,還得是一個小寫字母的字符。
%* 與%剛好相反,表示過濾滿足條件的字符,也就是跳過滿足條件的字符,其后一定要有新的%語句,否則無法讀入
3. 跳過指定范圍的字符再讀取指定范圍的字符
scanf("%*[a-z0-9]%[^\n]",str1);
printf("%s\n",str1);
輸入:a1b2c3ABCdef 123
輸出:ABC
4. %和%*組合使用可以提取指定字符串
從<sip:tom@172.18.1.133>中提取tom
const char* url = "<sip:tom@172.18.1.133>";
char uri[10] = {0};
sscanf(url,"%*[^:]:%[^@]", uri);
printf("%s ",uri);
從iios/12DDWDFF@122中提取12DDWDFF
const char* s = "iios/12DDWDFF@122";
char buf[20];
sscanf(s, "%*[^/]/%[^@]", buf);