前言
给大家分享一下几个你可能不知道的小东东
一、 scanf printf返回值
example1
int num = printf("1234");
printf("\n num = %d\n", num);
return 0;
结果:
1234
num = 4
analyze:
纯字符串情况下 返回值是字符个数。
example2
int num = printf("a=%2d,b=%d", 1000, 20);
printf("\n num = %d\n", num);
结果:
a=1000,b=20
num = 11
analyze:
返回值是格式转换后输出字符串长度。
example3
int a;
int b;
int num = scanf("%d%d", &a, &b);
printf("%d\n", num);
结果:
2
analyze:
scanf的返回值是成功输入数据的个数。
总结:printf的返回值是打印字符串的长度, scanf的返回值是成功输入数据到变量中的个数。
二、 scanf 正则表达式
example1
char str[100] = {0};
scanf("%s", str);
printf("%s\n", str);
analyze:
空格和回车都是结束标志。
比如123空格符123 结果输出:123
比如123回车 结果输出:123
example2
char str[100] = {0};
scanf("%[^=]", str);
printf("%s\n", str);
输出结果:
123=5678=123回车
123
analyze:
输入结束标志, 可以使用自己喜欢的符号, 不一定是=
号, 读入的时候只读入结束标志之前的。
example3
char str[100] = {0};
scanf("%[1]", str);
printf("%s\n", str);
输出结果:
输入 11111121
111111
analyze:
读取开头的1, 只要不是1就结束读取。
那如果只需要0-9呢? 只需要改一下表达式
example4
char str[100] = {0};
scanf("%[0-9]", str);
printf("%s\n", str);
输出结果:
输入 12345a123
12345
同理a-z
和 A-Z
表示此范围的字符
当然也有组合比如a-zA-Z
0-9a-zA-Z
取反^
表示遇到这些字符不在读取.
总结:
%[=]
表示只读取=遇到不是等不再把后边的数据读入变量。反之^=, 表示遇到第一个=
, 不在把后边数据读入变量。
三、 sscanf
example1
char *str = "25 Female iPhone 175";
//25is age, 175 is height
//抽取字符串中的25和175数据
int age, height;
sscanf(str, "%d %*s %*s %d", &age, &height);
printf("age = %d height = %d\n", age, height);
打印:
age = 25 height = 175
按照响应的格式对应, 如果想要某一个数据,就不用加%s, 通过这样的处理, 可以获取字符串中想要的数据。
网友评论