如何在C中使用结构指针作为参数调用void函数?

XXTT 000123

我真正需要的只是有关如何将此类函数返回给调用方的示例。除了函数和参数的类型外,甚至不必与我的代码相关。

我在下面编写了该函数,该函数应读取三个用户定义的人员的姓名和年龄。

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发表任何声明吗?我找不到关于它的示例(如果有人有任何示例,我想我可以通过这些示例自己弄清楚代码)?

谢谢您事先提供的帮助,我非常感谢。

用户名

readDatafindMiddleAge p指向man[3]main
readData数组中可以直接填充。检查的返回是一个好习惯scanf如果扫描了姓名和年龄,它将返回2。返回1、0或EOF表示有问题。
在中findMiddleAge确定的中间值p[0].age然后返回正确的p[1].agep[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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C中使用不同的变量作为函数参数?

来自分类Dev

void **指针和void * []作为函数参数

来自分类Dev

如何通过作为参数传递的函数指针调用函数?

来自分类Dev

C:将函数指针放在结构中,其中函数使用该结构作为参数

来自分类Dev

如何在结构中调用函数指针?

来自分类Dev

如何从C#使用结构指针参数调用C ++函数?

来自分类Dev

如何在嵌套函数中使用参数调用函数?

来自分类Dev

如何在函数中使用函数作为参数?

来自分类Dev

如何在Cython中使用void指针

来自分类Dev

如何在不使用C ++创建函数对象的情况下将函数指针作为模板值参数传递?

来自分类Dev

如何在c中使用带有参数的函数指针?

来自分类Dev

如何接受带有任意数量参数的函数的指针(作为C中的参数)并调用它?

来自分类Dev

如何在C ++中使用函数的参数作为指针从DLL返回值?

来自分类Dev

如何在函数调用中使用Typescript泛型类构造函数作为参数

来自分类Dev

如何在Rust中使用方法作为函数指针

来自分类Dev

如何在PHP中使用参数作为字符串调用函数?

来自分类Dev

c结构将自身作为参数传递给指针函数

来自分类Dev

您如何在C中使用void指针?

来自分类Dev

如何在C ++中使用指向结构的指针向量?

来自分类Dev

如何在扩展方法中使用函数作为参数?

来自分类Dev

如何在函数中使用AngularJS值作为参数?

来自分类Dev

无法在C中将结构指针作为函数参数传递

来自分类Dev

如何在C中使用结构调用函数?

来自分类Dev

如何在函数中使用 dir() 作为默认参数

来自分类Dev

如何在 C 中使用指针和结构

来自分类Dev

C ++在函数中使用指向结构的指针

来自分类Dev

如何在C中调用具有函数指针作为参数的函数?

来自分类Dev

如何在结构中使用指针?

来自分类Dev

如何在模板函数中使用不同的结构作为模板参数?

Related 相关文章

  1. 1

    如何在C中使用不同的变量作为函数参数?

  2. 2

    void **指针和void * []作为函数参数

  3. 3

    如何通过作为参数传递的函数指针调用函数?

  4. 4

    C:将函数指针放在结构中,其中函数使用该结构作为参数

  5. 5

    如何在结构中调用函数指针?

  6. 6

    如何从C#使用结构指针参数调用C ++函数?

  7. 7

    如何在嵌套函数中使用参数调用函数?

  8. 8

    如何在函数中使用函数作为参数?

  9. 9

    如何在Cython中使用void指针

  10. 10

    如何在不使用C ++创建函数对象的情况下将函数指针作为模板值参数传递?

  11. 11

    如何在c中使用带有参数的函数指针?

  12. 12

    如何接受带有任意数量参数的函数的指针(作为C中的参数)并调用它?

  13. 13

    如何在C ++中使用函数的参数作为指针从DLL返回值?

  14. 14

    如何在函数调用中使用Typescript泛型类构造函数作为参数

  15. 15

    如何在Rust中使用方法作为函数指针

  16. 16

    如何在PHP中使用参数作为字符串调用函数?

  17. 17

    c结构将自身作为参数传递给指针函数

  18. 18

    您如何在C中使用void指针?

  19. 19

    如何在C ++中使用指向结构的指针向量?

  20. 20

    如何在扩展方法中使用函数作为参数?

  21. 21

    如何在函数中使用AngularJS值作为参数?

  22. 22

    无法在C中将结构指针作为函数参数传递

  23. 23

    如何在C中使用结构调用函数?

  24. 24

    如何在函数中使用 dir() 作为默认参数

  25. 25

    如何在 C 中使用指针和结构

  26. 26

    C ++在函数中使用指向结构的指针

  27. 27

    如何在C中调用具有函数指针作为参数的函数?

  28. 28

    如何在结构中使用指针?

  29. 29

    如何在模板函数中使用不同的结构作为模板参数?

热门标签

归档