用scanf读取未知数量的整数存储到数组中,没有结束符
时间: 2024-09-08 20:02:45 浏览: 45
在C语言中,如果我们想要读取未知数量的整数到数组中,通常会使用循环结构来反复读取输入,直到满足某个特定条件为止。例如,可以使用`scanf`函数读取整数,并设置一个特定的结束条件,比如输入特定的结束符(如-1)来表示输入结束。然而,如果没有结束符,我们可能需要结合其他方法来判断何时停止输入。
一种方法是使用动态内存分配(例如使用`malloc`函数),这样我们可以先分配一个预估大小的数组,然后根据实际输入的数量动态调整数组的大小。这种方法需要在每次读取一个整数后检查是否有足够的空间,如果没有则需要重新分配更大的内存空间并复制旧数据。
以下是一个简单的示例代码,它使用动态内存分配来读取整数到数组中,直到用户输入特定的结束值(这里以0为结束值):
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int value, n = 0;
int *arr = NULL;
int capacity = 10; // 初始容量
// 动态分配初始内存空间
arr = (int*)malloc(capacity * sizeof(int));
if (arr == NULL) {
perror("Memory allocation failed");
return -1;
}
while (1) {
printf("Enter an integer (0 to finish): ");
scanf("%d", &value);
// 检查是否需要更多的空间
if (n >= capacity) {
capacity *= 2;
int *newArr = (int*)realloc(arr, capacity * sizeof(int));
if (newArr == NULL) {
perror("Failed to reallocate memory");
free(arr);
return -1;
}
arr = newArr;
}
// 读取整数,检查是否为结束值
if (value == 0) {
break;
}
arr[n++] = value;
}
// 输出读取的整数
printf("Read integers:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 释放动态分配的内存
free(arr);
return 0;
}
```
阅读全文