C语言用函数实现数组输入输出异常,求错误排查与解决方法
C语言数组输入输出函数的错误分析与修正方案
代码中的核心错误
- 值传递导致size变量失效:C语言默认采用值传递,
getarray函数的size参数是形参,函数内部通过scanf修改的只是这个形参的副本,完全不会影响main函数中声明的size变量。main里的size未初始化,是随机垃圾值,调用displayarray时用这个垃圾值作为循环条件,要么直接跳过输出循环,要么访问数组越界导致程序异常。 - 次要问题:输入提示
printf("enter the size of the array");没有换行符,会导致输入光标紧跟提示文字,用户体验不佳。
正确实现方案
要让getarray能修改main中的size变量,需传递size的内存地址(指针传递)。修正后的代码如下:
#include <stdio.h> #include <stdlib.h> // 修改参数为指针,用于传递size的地址 void getarray(int a[], int *size); void displayarray(int a[], int size); int main(void) { int a[20], size; // 传入size的地址 getarray(a, &size); displayarray(a, size); return EXIT_SUCCESS; } void getarray(int a[], int *size){ int i; printf("enter the size of the array:\n"); // 写入到size指针指向的内存地址 scanf("%d", size); printf("enter %d array elements:\n", *size); for(i=0; i<*size; i++){ scanf("%d", &a[i]); } } void displayarray(int a[], int size){ int i; printf("array elements are:\n"); for(i=0; i<size; i++){ printf("%d\t", a[i]); } // 换行优化输出格式 printf("\n"); }
代码说明
getarray的第二个参数改为int *size,接收main中size变量的地址。scanf("%d", size);直接写入指针指向的内存,确保main中的size被正确赋值。- 循环条件改为
i<*size,使用指针指向的实际数组大小。 - 添加了清晰的输入输出提示,优化交互体验。
内容的提问来源于stack exchange,提问作者Amalshanth
相关产品推荐
相关产品推荐

