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

如何将用户输入的数组大小传入其他代码文件的函数中?

解决用户输入数组大小并传递给函数的问题

需求:通过printf提示用户输入数组大小,将该值作为数组长度传入函数,替代当前写死的36,但尝试后无法实现。使用read_num[size]时调试器显示值为0,不知道如何正确传递用户输入的大小。

核心问题分析

  1. C语言中数组作为函数参数会退化为指针,无法直接获取数组长度,必须额外传递大小参数
  2. 原代码中read_array函数的参数、循环逻辑错误,且局部数组num_read的数据无法传递回主函数
  3. 主函数未正确获取并验证用户输入的大小值

解决方案步骤

  • 获取并验证用户输入:在主函数中提示用户输入数组大小,同时检查输入合法性(范围1~ARR_SIZE),避免数组越界
  • 修正函数参数与逻辑:read_array需接收数组指针和大小两个参数,直接操作传入的目标数组而非定义局部数组
  • 正确调用函数:传递主函数中定义的数组和用户输入的大小值

修改后的完整代码

main.c

#include "array_utils.h"

int main(void)
{
    int numbers[ARR_SIZE] = { 0 };
    int size = 0;
    double mean = 0;
    double stddev = 0;

    // 提示并获取合法的数组大小
    printf("请输入数组大小(1-%d):", ARR_SIZE);
    while (scanf_s("%d", &size) != 1 || size < 1 || size > ARR_SIZE)
    {
        printf("输入无效,请重新输入1到%d之间的整数:", ARR_SIZE);
        // 清除输入缓冲区的无效内容
        while (getchar() != '\n');
    }

    // 调用读取数组的函数
    read_array(numbers, size);

    // 调用后续计算与打印函数
    mean = calc_mean(numbers, size);
    stddev = calc_stddev(numbers, size);
    print_array(numbers, size);

    printf("平均值:%.2lf\n标准差:%.2lf\n", mean, stddev);

    return 0;
}

file.c

#include "array_utils.h"

// 修正函数:接收数组指针和大小参数
int read_array(int arr[], int size)
{
    int i = 0;
    while (i < size)
    {
        printf("请输入第%d个数字:", i + 1);
        // 校验输入有效性
        if (scanf_s("%d", &arr[i]) != 1)
        {
            printf("输入错误,请重新输入!\n");
            // 清空输入缓冲区
            while (getchar() != '\n');
            continue;
        }
        ++i;
    }
    return i; // 返回实际读取的元素数量
}

// 计算平均值
double calc_mean(int arr[], int size)
{
    double sum = 0.0;
    for (int i = 0; i < size; ++i)
    {
        sum += arr[i];
    }
    return sum / size;
}

// 计算标准差
double calc_stddev(int arr[], int size)
{
    double mean = calc_mean(arr, size);
    double sum_sq_diff = 0.0;
    for (int i = 0; i < size; ++i)
    {
        sum_sq_diff += (arr[i] - mean) * (arr[i] - mean);
    }
    return sqrt(sum_sq_diff / size);
}

// 打印数组内容
void print_array(int arr[], int size)
{
    printf("输入的数组内容:");
    for (int i = 0; i < size; ++i)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

头文件(array_utils.h)

#include <stdio.h>
#include <math.h>
#define ARR_SIZE 100

// 修正函数声明,添加size参数
int read_array(int arr[], int size);
double calc_mean(int arr[], int size);
double calc_stddev(int arr[], int size);
void print_array(int arr[], int size);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:40:34