作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为“人”的结构创建一个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_t
至person_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/
我是一名优秀的程序员,十分优秀!