📅  最后修改于: 2023-12-03 15:39:56.452000             🧑  作者: Mango
这是一个程序员可能感兴趣的问题。以下是问题的完整描述:
在编写一个 C 程序时,如何动态分配一个结构的指针数组,该结构具有两个字段,类型为字符串和整数类型,然后使用用户输入填充每个结构的字段,并在屏幕上显示这些值?
首先,让我们按照问题描述动态分配一个结构指针数组:
struct my_struct {
char *str;
int num;
};
struct my_struct **arr;
int n;
printf("Enter the number of structures: ");
scanf("%d", &n);
arr = malloc(n * sizeof(struct my_struct *));
在这个代码中,我们定义了一个称为“my_struct”的结构,其中包含一个字符串类型的指针和一个整数类型。然后,我们定义了一个指向“my_struct”类型的指针数组“arr”,并从用户输入中读取数组长度“n”,并使用“malloc”函数来动态分配这个指针数组。
接下来,我们应该使用用户输入填充每个结构的字段。这可以通过一个循环来完成,循环次数等于数组长度:
for (int i = 0; i < n; i++) {
printf("Enter the string and the number for structure %d:\n", i+1);
arr[i] = malloc(sizeof(struct my_struct)); // allocate memory for each element in array
scanf("%s %d", arr[i]->str, &arr[i]->num); // read input from user
}
在这个循环中,我们使用“malloc”函数为每个元素分配了内存。然后,我们从用户输入中读取每个结构的字符串和整数字段,分别存储在“arr[i]->str”和“arr[i]->num”中。
最后,我们可以在屏幕上显示每个结构的值:
for (int i = 0; i < n; i++) {
printf("Structure %d: string=%s, num=%d\n", i+1, arr[i]->str, arr[i]->num);
}
在这个循环中,我们使用“printf”函数显示每个元素的值,“arr[i]->str”和“arr[i]->num”。
完整代码如下:
#include<stdio.h>
#include<stdlib.h>
struct my_struct {
char *str;
int num;
};
int main() {
struct my_struct **arr;
int n;
printf("Enter the number of structures: ");
scanf("%d", &n);
arr = malloc(n * sizeof(struct my_struct *)); // allocate memory for array of pointers
for (int i = 0; i < n; i++) {
printf("Enter the string and the number for structure %d:\n", i+1);
arr[i] = malloc(sizeof(struct my_struct)); // allocate memory for each element in array
scanf("%s %d", arr[i]->str, &arr[i]->num); // read input from user
}
for (int i = 0; i < n; i++) {
printf("Structure %d: string=%s, num=%d\n", i+1, arr[i]->str, arr[i]->num);
}
return 0;
}
代码片段已经按照markdown格式返回。