📌  相关文章
📜  教资会网络 | UGC-NET CS 2017 年 12 月 2 日 |问题 31(1)

📅  最后修改于: 2023-12-03 15:39:56.452000             🧑  作者: Mango

教资会网络 | UGC-NET CS 2017 年 12 月 2 日 |问题 31

这是一个程序员可能感兴趣的问题。以下是问题的完整描述:

在编写一个 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格式返回。