我真正需要的只是有关如何将此类函数返回给调用方的示例。除了函数和参数的类型外,甚至不必与我的代码相关。
我在下面编写了该函数,该函数应读取三个用户定义的人员的姓名和年龄。
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
发表任何声明吗?我找不到关于它的示例(如果有人有任何示例,我想我可以通过这些示例自己弄清楚代码)?
谢谢您事先提供的帮助,我非常感谢。
在readData
和findMiddleAge
p
指向man[3]
中main
。
在readData
数组中可以直接填充。检查的返回是一个好习惯scanf
。如果扫描了姓名和年龄,它将返回2。返回1、0或EOF表示有问题。
在中findMiddleAge
确定或的中间值p[0].age
,然后返回正确的值。p[1].age
p[2].age
#include <stdio.h>
typedef struct {
char name[20];
int age;
} Person;
void readData(Person *p);
Person findMiddleAge(Person *p);
int main()
{
Person man[3] = { { "", 0}}, middle = { "", 0};
readData(man);
middle = findMiddleAge(man);
printf("findMiddleAge(): %s %d\n", middle.name, middle.age);
return 0;
}
void readData(Person *p)
{
printf("Enter person 1: \n");
scanf("%19s %d", p[0].name, &p[0].age);
printf("Enter person 2: \n");
scanf("%19s %d", p[1].name, &p[1].age);
printf("Enter person 3: \n");
scanf("%19s %d", p[2].name, &p[2].age);
}
Person findMiddleAge(Person *p)
{
//figure out which is the middle value of
//p[0].age
//p[1].age
//p[2].age
return p[1];//or p[0] or p[2]
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句