#include<stdio.h>
//"scanf里面的任何%都至少要匹配1个字节",结合断路特性这实在是太讨厌了。
//通过分开的scanf,实现了匹配0~1个字节的功能。
int scanffunc(char* funcname,int* a,int* b) {
int ign = 0;//若是char,会导致栈崩溃。//坑。
if (scanf("%99[a-zA-Z]", funcname) == false)return __LINE__;
scanf("%*[ \n\t]");//无论成功或者失败,都不影响后续。
if (scanf("%1[(]",&ign) == false)return __LINE__;//之所以用ign,是因为scanf忽略字符串不算作一次读取。要注意1[]。
scanf("%*[ \n\t]");
if(scanf("%d", a)==false)return __LINE__;
scanf("%*[ \n\t]");
if(scanf("%1[,]",&ign)==false)return __LINE__;
scanf("%*[ \n\t]");
if (scanf("%d", b) == false)return __LINE__;
scanf("%*[ \n\t]");
if (scanf("%1[)]",&ign) == false)return __LINE__;
return 0;
}
int main()
{
char funcname[100];
funcname[0] = 0;
int a, b;
int suc = 1;
if ((suc = scanffunc(funcname, &a, &b)) == 0)
printf("%s(%d,%d)", funcname, a, b);
else printf("wrong at line %d", suc);
}
一个scanf用例
最新推荐文章于 2024-12-22 14:40:43 发布