首页 > 解决方案 > 需要帮助将 char* 扫描到具有结构的函数中

问题描述

我刚刚开始在我的一门大学课程中学习 C。我们讨论过类似的话题,但与我教授的要求不太一样。我对指针或结构一点也不擅长,所以这个分配变得令人沮丧,但我在上一次 scanf 中只收到一个错误,说“预期类型 char* 但得到 struct user**”,我无法弄清楚。

#include <stdio.h>

#define PEOPLE 10

struct user {
    int user_id;
    char* user_name;
};

void populate(struct user* users, int size);

void main() {
    struct user s1[PEOPLE], s2;
    populate(&s2, s1->user_id);
}

void populate(struct user* users, int size) {
    for(int i = 1; i < PEOPLE + 1; i++) {
        printf("Enter an ID of user %d: ", i);
        scanf("%d", &size);
        printf("Enter the name of user %d: ", i);
        scanf("%s", users);
    }
}

这是作业:

编写执行以下操作的 C 程序:

程序定义了一个名为 user 的 C 结构体,它有两个属性

int user_id;
char* user_name;

程序声明了一个包含大约 10 个 struct 用户变量的数组和一个名为 populate() 的函数,该函数将一个指向 struct 用户变量的指针和一个整数大小作为参数。populate() 方法将要求用户为 struct 用户变量数组中的每个单元分配一个 id 和名称,直到数组已满。提示:此函数的标头可能看起来像 void populate (struct user* users, int size);

这是错误消息: https ://i.stack.imgur.com/xLUyo.png

标签: c

解决方案


在您的第二个 scanf 语句中,您尝试使用 struct 变量捕获字符串参数。您的第二个 scanf 语句应如下所示:

scanf("%s", users-> user_name);

您还将错误的参数传递给您的函数。完整的代码如下:

#include <stdio.h>

#define PEOPLE 10

struct user {
    int user_id;
    char user_name[20];
};

void populate(struct user* users, int size);

void main() {
    struct user s1[PEOPLE];
    populate(s1, PEOPLE);
}

void populate(struct user users[], int size) {
    for(int i = 0; i < size; i++) {
        printf("Enter an ID of user %d: ", i+1);
        scanf("%d", &users[i].user_id);
        printf("Enter the name of user %d: ", i+1);
        scanf("%s", users[i].user_name);
    }
}

推荐阅读