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

C语言:填充整型数组与浮点型数组的方式是否一致?

关于C语言中整型与浮点型数组填充的问题

嗨,刚学C语言遇到数组的问题太正常了,我来给你梳理清楚~首先直接给你结论:填充整型数组和浮点型数组的核心逻辑是完全一致的——都是靠循环遍历数组的每个元素,逐个赋值就行。两者的主要差异其实只在输入输出时用的格式控制符不一样,另外你写的代码里还有个关键问题得先修正!

一、填充数组的核心差异

  • 整型数组:输入输出都用%d这个格式符
  • 浮点型数组:输入用%f(专门针对float类型),输出的话,printf里用%f也能搞定float和double,要是更严谨的话,double可以用%lf,但float用%f准没错

二、你的代码里的坑

你写的这段:

int size, i; float items[size]; printf("How many it...")

有个致命问题:size还没被赋值,就用来定义数组长度了!局部变量没初始化的话值是随机的,这时候数组大小完全不确定,属于C语言里的“未定义行为”,程序搞不好直接崩溃,或者出一堆莫名其妙的结果。

正确的步骤应该是:

  1. 先让用户输入商品数量,把值存到size里
  2. 再去定义数组(要么用C99支持的变长数组,要么用动态内存分配malloc,后者兼容性更好)

三、给你写个完整的示例代码

结合你要做的超市结账系统需求,我写了个包含输入填充、计算总价、写入文件的完整例子,你可以参考:

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

int main() {
    int size, i;
    float *items;
    float total = 0.0;
    FILE *fp;

    // 先问用户有多少件商品
    printf("How many items do you have? ");
    scanf("%d", &size);

    // 用malloc动态分配内存,比变长数组更稳妥
    items = (float *)malloc(size * sizeof(float));
    if (items == NULL) {
        printf("哎呀,内存分配失败了!\n");
        return 1;
    }

    // 逐个输入商品价格,同时算总价
    printf("请输入每件商品的价格:\n");
    for (i = 0; i < size; i++) {
        printf("第%d件:", i+1);
        scanf("%f", &items[i]);  // 这里注意用%f对应float
        total += items[i];
    }

    // 把总价写到文件里
    fp = fopen("total_price.txt", "w");
    if (fp == NULL) {
        printf("打开文件失败啦!\n");
        free(items);  // 别忘了释放内存
        return 1;
    }
    fprintf(fp, "总价:$%.2f\n", total);
    fclose(fp);

    // 用完内存要释放哦
    free(items);

    printf("总价已经计算并保存到文件里啦!\n");
    return 0;
}

四、额外提醒

  • 要是你的编译器支持C99标准,也可以用变长数组(就是float items[size];),但必须等size被赋值之后再定义,而且变长数组不能初始化,也不能放在全局区域。
  • 另外,用浮点型存金钱可能会有精度问题哦,比如0.1+0.2不等于0.3这种情况。如果要严谨处理金钱,建议用整型(比如把价格存成“分”为单位的整数),最后输出的时候再转换成元,这样就不会有精度误差啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:57:10