语法充其量是晦涩难懂的——我建议使用不同的方法,例如strtok()
,或使用字符串处理函数进行解析strchr()
etc.
然而,您必须意识到的第一件事是%[^<delimiter-list>]
格式说明符(行话中的“扫描集”,由 POSIX 记录)scanf()在许多其他地方)仅提取字符串字段 - 如果提取的字符串代表的是整数,则必须将其转换为整数。
其次,您仍然必须在格式说明符之外包含分隔符作为文字匹配字符 - 您已用逗号分隔格式说明符,其中|
都在输入流中。
考虑以下:
#include <stdio.h>
int main()
{
char a[32] ;
char b[32] ;
char c[32] ;
char istr[32] ; // Buffer for string representation of i
int i ;
int j ; // j can be converted directly as it is at the end.
// Example string
char str[] = "fieldA|fieldB|fieldC|15.27" ;
int converted = sscanf( str, "%[^|]|%[^|]|%[^|]|%[^.].%i", a, b, c, istr, &j ) ;
// Check istr[] has a field before converting
if( converted == 5 )
{
sscanf( istr, "%i", &i) ;
printf( "%s, %s %s, %d, %d\n", a, b, c, i, j ) ;
}
else
{
printf( "Fail - %d fields converted\n", converted ) ;
}
return 0 ;
}