Все, что мне действительно нужно, это просто примеры того, как вернуть функции такого рода вызывающей стороне. Не нужно даже иметь отношение к моему коду, кроме типа функции и параметра.
Я написал эту функцию ниже, которая должна считывать имя и возраст трех пользователей, определенных пользователем.
void readData(Person *p)
{
char name1[20], name2[20], name3[20];
int age1, age2, age3;
printf("Enter person 1: \n");
scanf("%s %d", &name1, &age1);
printf("Enter person 2: \n");
scanf("%s %d", &name2, &age2);
printf("Enter person 3: \n");
scanf("%s %d", &name3, &age3);
struct person1 {char name1[20]; int age1};
struct person2 {char name2[20]; int age2};
struct person3 {char name3[20]; int age3};
struct Person {struct person1; struct person2; struct person3};
struct Person man[3] = {{name1, age1}, {name2, age2}, {name3, age3}};
p = &man;
}
Я хотел бы повторно использовать переменные вышеупомянутой функции, чтобы я мог использовать ее в функции ниже. Как я должен это сделать, поскольку я не могу «повторно объявить» переменные, потому что они определены пользователем? Должен ли я позвонить по ссылке или по значению, и если да, то как мне это сделать? Мне нужно return
что-нибудь? Я не могу найти примеры для такого рода функций, любая помощь действительно приветствуется.
Person findMiddleAge(Person *p)
{
int middle;
if ((age1 < age2 && age2 < age3) || (age3 < age2 && age2 < age1)) {
middle = age2;
struct Person man[1] = {name2, age2};
}
else if ((age2 < age1 && age1 < age3) || (age3 < age1 && age1 < age2)) {
middle = age1;
struct Person man[1] = {name1, age1};
}
else if ((age1 < age3 && age3 < age2) || (age2 < age3 && age3 < age1)) {
middle = age3;
struct Person man[1] = {name3, age3};
}
printf("%d \n", middle);
}
Блок кода ниже показывает весь мой код на всякий случай, если это имеет значение. Ничего нельзя изменить, кроме строк кода в функциях readData(Person *p)
и Person findMiddleAge(Person *p)
.
typedef struct {
char name[20];
int age;
} Person;
void readData(Person *p);
Person findMiddleAge(Person *p);
int main()
{
Person man[3], middle;
readData(man);
middle = findMiddleAge(man);
printf("findMiddleAge(): %s %d\n", middle.name, middle.age);
return 0;
}
void readData(Person *p)
{
char name1[20], name2[20], name3[20];
int age1, age2, age3;
printf("Enter person 1: \n");
scanf("%s %d", &name1, &age1);
printf("Enter person 2: \n");
scanf("%s %d", &name2, &age2);
printf("Enter person 3: \n");
scanf("%s %d", &name3, &age3);
struct person1 {char name1[20]; int age1};
struct person2 {char name2[20]; int age2};
struct person3 {char name3[20]; int age3};
struct Person {struct person1; struct person2; struct person3};
struct Person man[3] = {{name1, age1}, {name2, age2}, {name3, age3}};
p = &man;
}
Person findMiddleAge(Person *p)
{
int middle;
if ((age1 < age2 && age2 < age3) || (age3 < age2 && age2 < age1)) {
middle = age2;
struct Person man[1] = {name2, age2};
}
else if ((age2 < age1 && age1 < age3) || (age3 < age1 && age1 < age2)) {
middle = age1;
struct Person man[1] = {name1, age1};
}
else if ((age1 < age3 && age3 < age2) || (age2 < age3 && age3 < age1)) {
middle = age3;
struct Person man[1] = {name3, age3};
}
printf("%d \n", middle);
}
И да, это домашняя работа, но я действительно старался изо всех сил (я более 6 часов пытался получить желаемый результат, но я все еще не могу, C мне очень трудно понять). Я должен найти человека, чей возраст составляет середину трех человек, и вернуть имя и возраст этого человека звонившему. Я иду обо всем неправильно? На самом деле я просто хочу знать, как вернуть функции такого рода вызывающей стороне. Нужно ли ставить какие-либо заявления return
? Я не могу найти примеры на нем (если у кого-то есть примеры, я думаю, что могу сам разобраться в коде с этими примерами)
Спасибо за любую помощь заранее, я действительно ценю это.