【问题标题】:Can't return a struct from a function in C无法从 C 中的函数返回结构
【发布时间】:2015-07-23 00:26:16
【问题描述】:

每次我阅读employ.sex 时,程序都会崩溃,没有错误,我不知道为什么会这样。我是 C 的新手。“返回密码 [i] 有什么问题吗?请帮忙,我在搜索中找不到任何东西。提前致谢

#include <stdio.h>
#define N 5

struct stoixeia
    {
        int age;
        float h;
        char sex;
    };
struct melos
    {
        char fname[50];
        char lname[50];
        int mnum;
        struct stoixeia employ;
    };

struct melos diavasma(int );

int main()
{
    struct melos pin[N];
    struct melos * ptr;
    int i,pli;
    for(i=0;i<N;i++)
    {
        pin[i]=diavasma(i);
        printf("%d", pin[i].mnum); // i just use this to see if it returns anything
    }
    return 0;
}

struct melos diavasma(int i)
    {
        struct melos pin[i];
        struct stoixeia employ;
        printf("Dose onoma\n");
        scanf("%s", pin[i].fname);
        printf("Dose epitheto\n");
        scanf("%s", pin[i].lname);
        printf("Dose arithmo mitroou\n");
        scanf("%d", &pin[i].mnum);
        printf("Dose ilikia\n");
        scanf("%d", &pin[i].employ.age);
        printf("Dose upsos\n");
        scanf("%f", &pin[i].employ.h);
        printf("Dose fulo\n");
        scanf(" %c", &pin[i].employ.sex);
        return pin[i];
    }

【问题讨论】:

  • 你添加C++标签有什么原因吗?
  • 不,它在推荐部分,所以我只是添加了它
  • 当然不建议为不同的语言添加标签。弹出窗口只会在您键入时显示匹配项 - 否则您也会添加 C#。阅读标签的描述。
  • 对不起,这是我第一次使用这个网站,不会再发生了

标签: c function struct return


【解决方案1】:

你已经接近了:而不是声明一个数组,你在其中使用一个超出末尾的单个元素,因此崩溃,声明一个结构:

struct melos diavasma(int i)
{
    struct melos pin;
    printf("Dose onoma\n");
    scanf("%s", pin.fname);
    printf("Dose epitheto\n");
    scanf("%s", pin.lname);
    printf("Dose arithmo mitroou\n");
    scanf("%d", &pin.mnum);
    printf("Dose ilikia\n");
    scanf("%d", &pin.employ.age);
    printf("Dose upsos\n");
    scanf("%f", &pin.employ.h);
    printf("Dose fulo\n");
    scanf(" %c", &pin.employ.sex);
    return pin;
}

请注意,现在传递 i 是多余的。除非您打算在提示符中使用它,否则请考虑将其从函数的参数列表中删除。

【讨论】:

  • 就是这样!谢谢,我是否试图在数组中添加一个结构数组?这是我第一次使用结构,我仍然很困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
相关资源
最近更新 更多