scanf 的高级用法

扫描集

扫描集为一个字符集合,用来匹配期待输入的字符。对于scanf匹配输入内容时,可以使用扫描集灵活地进行字符串截取输入。

扫描集以 % 开头,用 [] 包含字符集。如扫描集 %[abc], %[a-z], %[^abc], %[^a-z] ,其中 ^ 表示求反集。

实例

基础

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main() {
char str[100]={0};
scanf("%s",str); // 输入123 123 空格当做结束 输出str=123
printf("str=%s",str);

scanf("%[^\n]",str); // 回车当结束输入123 123 输出str=123 123
printf("str=%s",str);
// 同理 [^,] 会以逗号当做结束

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
void main() {
char str[100]={0};
scanf("%[A-Za-z]",str);
// [0-9] 遇到第一个不是0-9就结束输入
// [A-Z] 遇到第一个不是A到Z就结束输入
// [a-zA-Z] 遇到第一个不是字母就结束输入
// [^A-Z] 遇到第一个A到Z的字母就结束输入
printf("str=%s",str);
return 0;
}

提取ip地址

1
2
3
4
5
6
7
8
#include <stdio.h>
int main() {
const char url[] = "<sip:tom@172.18.1.133>";
char ip[20]={0};
sscanf(url, "%*[^@]@%[^>]", ip);
printf("%s", ip); // 172.18.1.133
return 0;
}

提取名字

1
2
3
4
5
6
7
8
#include <stdio.h>
int main() {
const char s[] = "iios/12DDWDFF@122";
char name[20];
sscanf(s, "%*[^/]/%[^@]", name);
printf("%s", name); // 12DDWDFF
return 0;
}
作者

吉吉

发布于

2021-01-12

更新于

2024-04-24

许可协议