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

C语言中如何读取首数为元素个数的动态数组多整数输入?

动态读取首数指定长度的整数序列

解决这个问题的核心是分两步处理输入:先获取后续元素的数量,再动态分配内存读取剩余数据,具体实现步骤如下:

  • 第一步:读取第一个整数,确定后续需要读取的元素个数
    先单独读取序列的第一个数,这个操作不需要提前知道总长度,直接用scanf("%d", &count)即可完成。

  • 第二步:动态分配内存
    根据读取到的count值,用malloc或calloc分配对应大小的内存空间,记得要检查内存分配是否成功,避免内存不足导致程序崩溃:

    int *arr = (int*)malloc(count * sizeof(int));
    if (arr == NULL) {
        // 内存分配失败的处理逻辑,比如打印错误信息并退出
        fprintf(stderr, "内存分配失败\n");
        return 1;
    }
    
  • 第三步:循环读取剩余整数
    用for循环遍历count次,逐个将后续整数读取到动态数组中:

    for (int i = 0; i < count; i++) {
        scanf("%d", &arr[i]);
    }
    
  • 第四步:使用完数组后释放内存
    动态分配的内存不会自动回收,使用完毕后一定要用free(arr);释放,避免内存泄漏。

完整示例代码

#include <stdio.h>
#include <stdlib.h>

int main() {
    int count;
    // 读取第一个整数,确定后续元素数量
    if (scanf("%d", &count) != 1) {
        fprintf(stderr, "输入格式错误\n");
        return 1;
    }

    // 动态分配内存
    int *arr = (int*)malloc(count * sizeof(int));
    if (arr == NULL) {
        fprintf(stderr, "内存分配失败\n");
        return 1;
    }

    // 读取后续整数
    for (int i = 0; i < count; i++) {
        if (scanf("%d", &arr[i]) != 1) {
            fprintf(stderr, "读取第%d个整数失败\n", i+1);
            free(arr); // 提前释放已分配的内存
            return 1;
        }
    }

    // 示例:打印读取到的数组
    printf("读取到的数组:");
    for (int i = 0; i < count; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 释放内存
    free(arr);
    return 0;
}

说明:scanf会自动跳过输入中的空格、换行符等空白字符,所以不管输入是在同一行还是分多行,都能正确读取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:31:02