C语言如何动态输入
在C语言中,动态输入、动态分配内存、使用scanf函数是实现动态输入的核心内容。动态输入是指在程序运行时,根据用户的需要动态地输入数据,而不是在编写程序时固定数据的大小或数量。动态输入在很多实际应用中都非常重要,例如处理不确定长度的字符串或变长数组。本文将深入探讨C语言中实现动态输入的各种方法和技巧。
一、动态内存分配
动态内存分配是实现动态输入的基础。在C语言中,常用的动态内存分配函数包括malloc
、calloc
和realloc
。这些函数位于标准库stdlib.h
中。
1、使用malloc
函数
malloc
函数用于分配指定大小的内存块,并返回指向该内存块的指针。以下是一个简单的例子:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n;
printf("Enter the number of elements: ");
scanf("%d", &n);
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failedn");
return 1;
}
for (int i = 0; i < n; i++) {
printf("Enter element %d: ", i + 1);
scanf("%d", &arr[i]);
}
printf("You entered: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
在这个例子中,我们首先动态分配了一个整型数组的内存,并使用scanf
函数从用户处获取输入。最后,通过free
函数释放内存。
2、使用calloc
函数
calloc
函数与malloc
类似,但它会初始化分配的内存为零。以下是一个示例:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n;
printf("Enter the number of elements: ");
scanf("%d", &n);
arr = (int *)calloc(n, sizeof(int));
if (arr == NULL) {
printf("Memory allocation failedn");
return 1;
}
for (int i = 0; i < n; i++) {
printf("Enter element %d: ", i + 1);
scanf("%d", &arr[i]);
}
printf("You entered: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
在这个例子中,calloc
函数确保了分配的内存块被初始化为零,避免了未初始化内存的使用。
3、使用realloc
函数
realloc
函数用于调整已分配内存块的大小。它可以增加或减少内存块的大小。以下是一个例子:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n, new_n;
printf("Enter the number of elements: ");
scanf("%d", &n);
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failedn");
return 1;
}
for (int i = 0; i < n; i++) {
printf("Enter element %d: ", i + 1);
scanf("%d", &arr[i]);
}
printf("Enter the new number of elements: ");
scanf("%d", &new_n);
arr = (int *)realloc(arr, new_n * sizeof(int));
if (arr == NULL) {
printf("Memory reallocation failedn");
return 1;
}
for (int i = n; i < new_n; i++) {
printf("Enter element %d: ", i + 1);
scanf("%d", &arr[i]);
}
printf("You entered: ");
for (int i = 0; i < new_n; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
在这个例子中,我们首先分配了一个整型数组的内存,然后通过realloc
函数调整数组的大小,并获取新的输入。
二、动态字符串输入
处理动态字符串输入是另一个常见的需求。在C语言中,字符串是以字符数组的形式存储的,因此我们需要动态分配内存来处理不确定长度的字符串。
1、使用malloc
和realloc
处理字符串输入
以下是一个简单的例子,演示如何使用malloc
和realloc
来处理动态字符串输入:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *str;
char ch;
int len = 0, capacity = 1;
str = (char *)malloc(capacity * sizeof(char));
if (str == NULL) {
printf("Memory allocation failedn");
return 1;
}
printf("Enter a string: ");
while ((ch = getchar()) != 'n') {
if (len + 1 >= capacity) {
capacity *= 2;
str = (char *)realloc(str, capacity * sizeof(char));
if (str == NULL) {
printf("Memory reallocation failedn");
return 1;
}
}
str[len++] = ch;
}
str[len] = '