如何设置sscanf格式,使逗号被识别为格式分隔符而非字符串
解决sscanf将逗号视为字符串内容的问题
原问题中,%s格式符会匹配所有非空白字符,因此它会把abcd,整个当作字符串读入,跳过了格式串里的逗号,导致后续%d无法匹配到数字10,val保持初始值0。
要让扫描器把逗号当作格式的一部分,推荐两种实用方法:
方法一:用%[^,]限定字符串匹配范围
%[^,]表示匹配除逗号之外的所有字符,能精准读取逗号前的abcd,之后格式串里的逗号会和输入字符串里的逗号对应,顺利读取后续整数。
修改后的代码:
#include <stdio.h> int main() { char str[255]; int val; sscanf("(abcd, 10)", "(%[^,], %d)", str, &val); printf("string: %s; int: %d\n", str, val); }
运行输出:
string: abcd; int: 10
方法二:手动定位并跳过逗号(不推荐)
先读取字符串,再通过指针偏移找到逗号位置,跳过逗号后读取整数,这种方法繁琐且易出错,示例代码如下:
#include <stdio.h> int main() { char str[255]; int val; char *ptr = "(abcd, 10)"; sscanf(ptr, "(%s", str); while (*ptr != ',') ptr++; sscanf(ptr+2, "%d)", &val); printf("string: %s; int: %d\n", str, val); }
优先选择第一种方法,通过格式控制符直接限定匹配范围,简洁且可靠性更高。
内容的提问来源于stack exchange,提问作者milanHrabos
相关产品推荐
相关产品推荐

