使用c中的函数填充结构



当我使用函数填充结构时,请有人帮助我。我从输入的内容中获得不同的值。我已经在这里存放了一段时间。请有人帮我

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct myEMP
{
char *empName[20];
int *empID;
float *NofHworked;
int *payRate;
}myEMP;
char *Names;
myEMP getInfo(myEMP 
employee) {
printf("Name:");


strcpy(employee.empName,fgets( 
&Names,20,stdin)  );
printf("ID :");

scanf("%d",&employee.empID);
printf("No of hours 
worked :");

scanf("%f",&employee.NofHworked);
printf("Pyrate :");
scanf("%d",&employee.payRate);
return employee;
}

int main(){
int N;

myEMP *empINFO;

getInfo(*empINFO);
printf("Name t Id  t 
hours t  payrate n" );
printf("%s t %d t %.2f t 
%d",empINFO- 
>empName,empINFO- 
>empID,empINFO- 
>NofHworked,empINFO- 
>payRate);
return 0;
}

我试着用运行代码name: John Doe Id :01 No of hours worked : 06 Payrate :25

这就是我得到的Name: â-#[|ìv Id: -1961038717 Hours: 0.00 Payrate:-1065106551

我不知道该怎么办,因为我是新来的,有人请帮助

您的代码有多个问题:第一个问题是您的代码很难阅读,因为它没有正确缩进。我冒昧地为您订购:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct myEMP {
char* empName[20];
int* empID;
float* NofHworked;
int* payRate;
} myEMP;
char* Names;
myEMP getInfo(myEMP employee) {
printf("Name:");
strcpy(employee.empName, fgets(&Names, 20, stdin));
printf("ID :");
scanf("%d", &employee.empID);
printf("No of hours worked :");
scanf("%f", &employee.NofHworked);
printf("Pyrate :");
scanf("%d", &employee.payRate);
return employee;
}
int main() {
int N;
myEMP* empINFO;
getInfo(*empINFO);
printf("Name t Id  t hours t  payrate n");
printf("%s t %d t %.2f t %d",empINFO->empName, empINFO->empID, empINFO->NofHworked, empINFO->payRate);
return 0;
}

第二件事是:您应该决定函数getInfo的签名。IMHO,有两种可能性:

  1. 使用void getInfo(myEMP* employee)作为签名
  2. 使用myEMP getInfo()作为签名

第一个将修改存储在您提供的内存地址中的员工,而第二个将返回一个新员工。

如果你真的想使用你现在的功能,你必须至少在以下两点上改进你的main功能:

  1. mallocempINFO的存储器
  2. 使用getInfo提供的返回值

但是,我建议重新设计getInfo函数。

请注意,我还没有测试你的代码,所以很有可能会出现更多问题。

最新更新