2016-03-28 46 views
2

所以我正在使用嵌套结构和将结构作为参数传递给函数。结构作为参数传递,但不能正常工作

这里是我的主要功能:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

struct date { 
    int dd; 
    int mm; 
    int yy; 
}; 

struct employee { 
    char fn[50]; 
    char ln[50]; 
    struct date dob; 
    struct date sd; 
    int salary; 
}; 

void take_input(struct employee e); 
void give_output(struct employee e); 

int main(void) 
{ 
    struct employee a; struct employee b; struct employee c; struct employee d; struct employee f; 

    take_input(a); 
    take_input(b); 
    take_input(c); 
    take_input(d); 
    take_input(f); 

    give_output(a); 
    give_output(b); 
    give_output(c); 
    give_output(d); 
    give_output(f); 

    return 0; 
} 

而且这里有两个功能:

void take_input(struct employee e) 
{ 
    printf("\nFirst name: "); 
    gets(e.fn); 
    printf("\nLast name: "); 
    gets(e.ln); 
    printf("\nDate of Birth: "); 
    scanf("%d %d %d", &e.dob.dd, &e.dob.mm, &e.dob.yy); 
    printf("\nDate of Joining: "); 
    scanf("%d %d %d", &e.sd.dd, &e.sd.mm, &e.sd.yy); 
    printf("\nSalary: "); 
    scanf("%d", &e.salary); 
} 

void give_output(struct employee e) 
{ 
    printf("%s", e.fn); 
    printf(" %s", e.ln); 
    printf("\nDate of Birth: %d/%d/%d", e.dob.dd, e.dob.mm, e.dob.yy); 
    printf("\nStarting Date: %d/%d/%d", e.sd.dd, e.sd.mm, e.sd.yy); 
    printf("\nSalary: $%d\n", e.salary); 
} 

的问题是采取输入和存储数据不正常的功能。每次程序运行时都需要输入,但打印时会给出一些垃圾值。但是如果我在没有函数的情况下运行它(在main()函数下),它可以在相同的代码下正常工作。我似乎无法找出代码中的问题,所以任何帮助表示赞赏。

回答

3

C使用按值传递函数参数传递。所以,当你调用函数一样

take_input(a); 

a临时副本被传递给函数。无论您对被调用函数中的输入参数所做的任何更改,都不会对调用程序中存在的实际a产生任何影响。

您需要传递结构变量的地址,并对被调用函数内部的变量进行更改。只有这样,所做的更改将反映回从调用函数传递的实际参数。

+0

按价值传递大型结构也可能会造成严重的性能下降。 – tofro