当我使用函数填充结构时,请有人帮助我。我从输入的内容中获得不同的值。我已经在这里存放了一段时间。请有人帮我
#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,有两种可能性:
- 使用
void getInfo(myEMP* employee)
作为签名 - 使用
myEMP getInfo()
作为签名
第一个将修改存储在您提供的内存地址中的员工,而第二个将返回一个新员工。
如果你真的想使用你现在的功能,你必须至少在以下两点上改进你的main
功能:
malloc
是empINFO
的存储器- 使用
getInfo
提供的返回值
但是,我建议重新设计getInfo
函数。
请注意,我还没有测试你的代码,所以很有可能会出现更多问题。