gpt4 book ai didi

c - 正在做 c 作业并出现我不明白的错误

转载 作者:行者123 更新时间:2023-11-30 20:18:01 24 4
gpt4 key购买 nike

我正在为“人”的结构创建一个typedef,该人有一个姓名、ssn出生年份。我的 for 循环遇到了我不明白的错误。

[Error] cannot convert 'person_t' to 'person_t*' for argument '1' to 
'void getOnePerson(person_t*)'

这是第一个文件:

#include <stdio.h>
#include <string.h>
#include "structures.h"
void getOnePerson(person_t *p)
{
printf("Enter full name: ");
scanf("%99[^\n]", p -> name);

printf("Enter ssn: ");
scanf("%99[^\n]", p -> ssn);

printf("Enter year of birth: ");
scanf("%d", &p -> yearOfBirth);
}
void printOnePerson(person_t p)
{
printf("%s:", p.name);
printf("%s:", p.ssn);
printf("%s\n", p.yearOfBirth);

}
void getPeople(person_t p[], int numOfPeople)
{
for(int i = 0; i < sizeof(p); i++)
{
getOnePerson(p[i]);
}
}
void printPeople(person_t p[], int numOfPeople)
{
for(int i = 0; i < sizeof(p); i++)
{
printOnePerson(p[i]);
}
}

这是我的结构文件:

#define NAME_SIZE 80
#define SSN_SIZE 13
#define NUM_PEOPLE 10
typedef struct
{
char name[NAME_SIZE];
char ssn[SSN_SIZE];
int yearOfBirth;
} person_t;

最佳答案

首先,这似乎是指针和引用的任务。您可能需要阅读this去理解他们。换句话说,无法转换person_tperson_t*意味着您正在尝试使用您的对象人而不是引用该特定人。 *表示引用,因此您需要使用 & 向其传递地址。 。我不是最好的解释者,请查看链接和所有答案,而不仅仅是接受的答案。

代码看起来很乱,我尝试将其修复为可编译的代码,尽管我没有C编译器(您可能需要根据作业详细信息进行编辑/修复):

#include <stdio.h>
#include <string.h>
#define NAME_SIZE 80
#define SSN_SIZE 13
#define NUM_PEOPLE 10

typedef struct
{
char name[NAME_SIZE];
char ssn[SSN_SIZE];
int yearOfBirth;
} person_t;

int main()
{
person_t people[NUM_PEOPLE];
printf("Get people\n");
getPeople(&people, 3);

printf("\nPrint people\n");
printPeople(people, 3);
return 0;
}

void getOnePerson(person_t *person)
{
printf("Enter full name: ");
scanf("%s", person -> name);
printf("\nEnter ssn: ");
scanf("%s", person -> ssn);
printf("\nEnter year of birth: ");
scanf("%s", person -> yearOfBirth);
}

void printOnePerson(person_t p)
{
printf("%s:%s:%d\n", p.name, p.ssn, p.yearOfBirth);
}

void getPeople(person_t *person[], int num)
{
int i;
for(i=0; i<num; i++)
{
getOnePerson(&person[i]);
}
}

void printPeople(person_t person[], int num)
{
int i;
for(i=0; i<num; i++)
{
printOnePerson(person[i]);
}
}

简单来说,您的 getPeople(person_t *person[], int num)函数的第一个参数是person_t *person[] ,因此您需要传递 &people 。与getOnePerson(person_t *person)相同参数person_t *person意味着您需要将地址传递给单个人对象 &person[i] 。它们背后的含义是,使用引用,您可以直接在函数中编辑这些对象中的值。而printPeople(person_t person[], int num)printOnePerson(person_t p)用于读取(而不是编辑),因此您可以自行传递值。

关于c - 正在做 c 作业并出现我不明白的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com