如何将用户输入的数组大小传入其他代码文件的函数中?
解决用户输入数组大小并传递给函数的问题
需求:通过printf提示用户输入数组大小,将该值作为数组长度传入函数,替代当前写死的36,但尝试后无法实现。使用
read_num[size]时调试器显示值为0,不知道如何正确传递用户输入的大小。
核心问题分析
- C语言中数组作为函数参数会退化为指针,无法直接获取数组长度,必须额外传递大小参数
- 原代码中
read_array函数的参数、循环逻辑错误,且局部数组num_read的数据无法传递回主函数 - 主函数未正确获取并验证用户输入的大小值
解决方案步骤
- 获取并验证用户输入:在主函数中提示用户输入数组大小,同时检查输入合法性(范围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
相关产品推荐
相关产品推荐

