从读取的一行文本提取float、long数值遇阻,求解决方法
多数值提取问题的解决方法
核心问题在于你没利用好解析函数的endptr参数——strtol()和strtof()会通过这个参数返回第一个非数值字符的指针,第二次提取必须从这个指针位置开始,而非重新从字符串开头解析。
以下是针对你示例的可运行代码:
#include <stdio.h> #include <stdlib.h> int main() { char buf[] = "请瞄准3.567度,高度为5米"; char *endptr; // 提取第一个float类型的角度值 float angle = strtof(buf, &endptr); // 从endptr指向的位置开始,提取第二个long类型的高度值 long height = strtol(endptr, &endptr, 10); printf("角度:%.3f度\n", angle); printf("高度:%ld米\n", height); return 0; }
关键注意事项
- 每次解析后,
endptr会自动更新到当前数值的下一个字符,后续解析必须基于这个新指针,否则会重复解析开头的非数值内容,导致返回0。 - 若字符串中有更多数值,可继续用更新后的
endptr调用对应解析函数。 - 可通过判断
endptr是否等于初始输入指针,来检测是否成功解析到数值(若相等则说明没找到有效数值)。
内容的提问来源于stack exchange,提问作者KaZaa
相关产品推荐
相关产品推荐

