C语言指针实现数组元素插入功能异常问题求助
问题诊断与修复方案
你遇到的问题根源非常明确:你的insert函数在成功插入元素后,没有更新数组的实际元素计数*size。
问题细节拆解
在insert函数中,当数组未满时,你确实把新元素放到了ar[*size]的位置,但紧接着没有对*size进行自增操作。这就导致不管你插入多少次元素,size的值始终停留在初始的0(或者initialize函数里重置后的0),所以display函数根据size来遍历数组时,自然会显示元素数量为0,也不会输出任何已插入的元素。
修复后的insert函数
只需要在元素赋值后添加一行(*size)++;,就能解决核心问题:
void insert (int max, int *size, int ar[], int num) { if(*size>=MAX) { printf("Array full\n"); // 建议加上换行,避免后续输出混乱 } else { ar[*size] = num; (*size)++; // 关键操作:插入元素后更新数组的实际元素计数 } }
额外优化建议
为了让程序更健壮,还可以给initialize函数加一个输入合法性检查,避免用户输入超过数组最大值的元素数量:
void initialize (int *size, int ar[]) { int total, i, num; printf ("Enter the total number of integers (MAX=%d): \n", MAX); scanf ("%d", &total); // 新增:校验输入的元素总数是否合法 if (total > MAX) { printf("Input exceeds maximum array size, will only insert %d elements\n", MAX); total = MAX; } else if (total < 0) { printf("Invalid number, setting to 0\n"); total = 0; } (*size) = 0; printf ("Enter the integers: \n"); for (i = 0; i < total; i++) { scanf ("%d", &num); insert (MAX, size, ar, num); } }
现在再按照你的测试流程运行:运行程序→选择选项1→输入数组大小→输入要添加的元素→选择选项4显示数组,就能正常看到插入的元素和正确的元素数量了。
内容的提问来源于stack exchange,提问作者Ben Yap
相关产品推荐
相关产品推荐

