问题描述
我要检查字符串是否为char,string,string
格式。我尝试使用sscanf来获取数据,并检查其是否为我想要的格式,但是它不起作用。
int main()
{
char buffer[1024];
char c1;
char c2[1024];
char c3[1024];
char c4[1024];
fgets(buffer,1024,stdin);
if (sscanf(buffer,"%c,%s,%s",&c1,c2,c3,c4) == 4)
{
printf("true\n");
}
else
{
printf("false\n");
}
}
例如^,oo,48,gg
应该返回true,因为它的格式为char,string
,但是&&,10,&h,***
将返回false,因为它的格式是string,string
解决方法
"%s"
与任何非空格字符序列匹配,只要至少有1个字符。它将作为一个字符串扫描"oo,48,gg"
。
请改为使用"%[^,]"
查找不是逗号的任何内容。
如果仅查找模式匹配项,而不需要保存数据,请使用*
进行扫描,但不保存。否则使用宽度限制。
考虑fgets()
保留'\n'
使用"%n"
扫描到目前为止已扫描的字符串偏移量。
int n = 0;
sscanf(buffer,"%*c,%*[^,],\n]%n",&n);
if (n > 0 && buffer[n] == '\n') {
printf("true\n");
} else {
printf("false\n");
}
sscanf(buffer,"%c,%1023[^,]",&c1,c2,c3,c4) == 4
将接受"^,oo,gg,zzz"
。 IMO,一个错误。