You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从读取的一行文本提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:25:23