- scanf 从控制台输入 fscanf 从文件输入 sscanf 从指定字符串输入
- scanf
- 用法为
int
scanf
(
const
char
* restrict format,...);
- scanf 是从标准输入读
- scanf一般情况下是碰到空格,制表符以及换行作为输入的结束
- 支持正则表达式 格式为 %[]
- []内是匹配的字符,^表示求反集,当遇到非集合内的字符时立即终止输入
- [a-z] 输入指定范围的小写字母,遇到非法字符立即终止
- [0-9] 输入指定范围的数字,遇到非法字符立即终止
- %[^a-z] 输入不包括指定字符的字符
- %*[a-z0-9] * 表示过滤满足条件的字符,也就是跳过满足条件的字符,其后一定要有新的%语句,否则无法读入
- fscanf
- 用法为 int fscanf(文件指针,格式字符串,输入列表);
- 返回值为读入的变量个数
- 支持的正则表达式与scanf相
- sscanf()
- 用法 int sscanf (const char *str,const char * format,........);
- 可以使用正则表达式,正则表达式用法与scanf相同
int year,month,day; scanf("%d-%d-%d",&year,&month,&day) ; cout<<year<<" "<<month<<" "<<day<<endl; //输入 2020-1-10 输出 2020 1 10
int income; scanf("%*[^0-9]%d",&income); cout<<income; // 输入 : Today's revenue is 3000 输出 : 3000 // %*[0-9]过滤了前面的非数字
char v1[100],v2[100]; scanf("%[^ ]%*c%[^ ]",v1,v2); cout<<v1<<" "<<v2<<endl; //输入 : china // USA
//输出; china USA
//%[^
] 可以读入一行,后面的%*c是为了过滤掉换行符
char ch[1000]; strcpy(ch, "Today is Saturday, January 11, 2020"); char weekday[100],month[100]; int year,day; sscanf(ch, "%*s%*s%*c%[^,]%*c%s%d%*c%d", weekday,month,&day,&year); cout << year << month << day << weekday << endl; //输出 : 2020January11Saturday //%*s%*s过滤 Today is %*c 过滤星期前的空格 %[^,]接受星期,后面的%*c
//均为过滤,