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
相关产品推荐
相关产品推荐

