c语言里输入未知长度数列
时间: 2024-09-10 15:28:38 浏览: 47
在C语言中,处理未知长度的数列通常涉及到动态内存分配,可以使用循环和指针结合数组或者链表结构来实现。这里以一维动态数组为例来说明:
1. **动态数组**:
- 首先,你需要预先声明一个能够存放任意数量元素的动态数组 `int *array`,并且设置初始容量,如`size_t capacity = 0;`
- 使用 `malloc()` 动态分配内存,例如 `capacity += someSize; array = realloc(array, capacity * sizeof(int));`
- 用户通过 `scanf()` 或其他输入函数读取每个元素,直到用户指定结束或者达到预设的最大容量。
- 输入结束后,记得释放内存,用 `free(array)`。
2. **链表**:
- 如果数据量可能会很大,链表可能是更好的选择,因为它们可以动态地增加节点而无需预先知道整个序列的大小。
- 创建一个包含 `struct Node` 的链表,每个节点包含一个整数值和指向下一个节点的指针。
- 用户输入值,并创建新的链表节点,添加到链表的尾部。
- 当用户停止输入或者达到某个条件时,遍历链表并处理所有元素。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int value;
struct Node* next;
} Node;
void inputArray(Node** head, size_t* capacity) {
Node* newNode = NULL;
while (true) {
int val;
scanf("%d", &val);
if (newNode == NULL) {
newNode = malloc(sizeof(Node));
newNode->value = val;
newNode->next = NULL;
} else {
newNode->next = malloc(sizeof(Node));
newNode->next->value = val;
newNode = newNode->next;
}
(*capacity)++;
// 添加判断条件来结束输入,比如 'q' 表示退出
char quitInput[2];
scanf(" %s", quitInput);
if (quitInput[0] == 'q') break;
}
// 将链表头部指针传递给使用者或后续处理
*head = newNode;
}
// 示例:
void main() {
Node* head = NULL;
size_t capacity = 0;
inputArray(&head, &capacity);
// 现在你可以操作链表了...
for (Node* node = head; node != NULL; node = node->next) {
printf("%d ", node->value);
}
// 最后别忘了释放内存
free(head);
}
```
阅读全文