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

如何读取一行中的多个浮点数并将其存入float数组

问题解答

方案1:基于已读取的字符串解析(推荐)

你完全可以基于fgets读取到的整行字符串来解析浮点数,这种方案的优势是可以严格控制只读取当前一行的数值,不会出现输入流错位、误读下一行内容的问题,是处理单行数值输入的常用稳妥方案。
你可以用C标准库的strtof函数完成解析,完整实现代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(){
    char input[500];
    float values[50];
    // 记录实际读取到的浮点数个数,避免数组越界
    int val_count = 0;

    // 读取整行输入
    fgets(input, sizeof(input), stdin);

    char *parse_pos = input;
    char *end_pos;

    // 循环解析浮点数,最多读取50个
    while (val_count < 50) {
        float cur_val = strtof(parse_pos, &end_pos);
        // 指针未移动说明没有可解析的有效浮点数,终止循环
        if (parse_pos == end_pos) {
            break;
        }
        values[val_count++] = cur_val;
        // 移动解析指针到下一个待解析位置
        parse_pos = end_pos;
    }

    // 以下为测试输出代码,可根据需求调整
    printf("成功读取%d个浮点数:\n", val_count);
    for (int i = 0; i < val_count; i++) {
        printf("%.2f ", values[i]);
    }

    return 0;
}

strtof会自动跳过数字前后的空格、换行等空白字符,刚好适配你给出的空格分隔的数值输入场景。

方案2:直接读取浮点数(适用不限行的场景)

如果你不需要单独存储整行输入内容,也可以直接用fscanf循环从标准输入读取浮点数:

#include <stdio.h>

int main(){
    float values[50];
    int val_count = 0;

    while(val_count < 50 && fscanf(stdin, "%f", &values[val_count]) == 1) {
        val_count++;
        // 如果需要严格限制只读一行,可以加判断读到换行就终止
        int next_char = getc(stdin);
        if (next_char == '\n' || next_char == EOF) {
            break;
        }
        ungetc(next_char, stdin); // 不是换行的话把字符塞回流里继续解析
    }

    return 0;
}

这种方案的缺点是处理单行输入时需要额外判断换行,容错性比方案1低。


内容的提问来源于stack exchange,提问作者Krishna Raju

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:57:01