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

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");
}

代码说明

  1. getarray的第二个参数改为int *size,接收main中size变量的地址。
  2. scanf("%d", size);直接写入指针指向的内存,确保main中的size被正确赋值。
  3. 循环条件改为i<*size,使用指针指向的实际数组大小。
  4. 添加了清晰的输入输出提示,优化交互体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:57:51