C语言中sscanf可读取int但无法读取double的问题求解
问题原因
你使用的sscanf格式串和源字符串的分隔规则不匹配:源字符串中各个数值用逗号+空格分隔,但你写的格式串"%d %lf %lf %lf"仅用空格作为分隔标记。sscanf读取完第一个int类型的1之后,下一个待匹配字符是逗号,不符合%lf要求的数值格式,直接终止匹配流程,后续三个double变量没有被赋值,保留了初始的0值。
解决方案
修改sscanf的格式串,增加对逗号分隔符的匹配即可,可选两种写法:
- 精确匹配当前的逗号+空格分隔格式:
sscanf(myString, "%d, %lf, %lf, %lf", &(myStruct->I1), &(myStruct->D1), &(myStruct->D2), &(myStruct->D3));
- 适配分隔符前后可能存在的任意数量空白(比如空格、制表符),兼容性更强:
// 格式串中的空格可以匹配0个或多个任意空白字符 sscanf(myString, "%d , %lf , %lf , %lf", &(myStruct->I1), &(myStruct->D1), &(myStruct->D2), &(myStruct->D3));
内容的提问来源于stack exchange,提问作者LargeLizard
相关产品推荐
相关产品推荐

