我正在学习一点C并且我正在进行练习,我使用结构和功能来收集员工信息并将其打印出来。 我正在声明标题中的函数和结构,因为我需要它们在其他两个文件中。
//employee.h
int addEmployee(void);
int printEmployee(int i);
struct employeelist
{
char last [20];
char first[20];
int pnumber;
int salary;
};
“核心”文件正在执行这两个功能。第一个函数询问员工数量,并为收集和存储信息的第二个函数返回一个值。没有错误,我已多次检查代码。
//employee.c
#include "employee.h"
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int numE;
int i;
int addEmployee(void)
{
struct employeelist employee[5];
int numE;
printf("How many employees do you want to add to the list?: ");
scanf("%d", &numE);
printf("Please type in the last name, the first name,\nthe personal number and the salary of your employees.\n");
for (i=0; i < numE; i++)
{
printf("Last name: ");
scanf("%s", employee[i].last);
printf("First name: ");
scanf("%s", employee[i].first);
printf("Personal number: ");
scanf("%d", &employee[i].pnumber);
printf("Salary: ");
scanf("%d", &employee[i].salary);
}
return numE;
}
int printEmployee(int emp)
{
struct employeelist employee[5];
for (i=0; i < emp; i++)
{
printf("Last name: {%s}\nFirst name: {%s}\nPersonal number: {%d}\nSalary: {%d}\n",employee[i].last,employee[i].first, employee[i].pnumber, employee[i].salary);
}
getchar();
getchar();
return emp;
}
最后一个文件包含执行上述功能的main()函数。
#include "employee.h"
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int emp;
int main ()
{
struct employeelist employee[5];
int emp = addEmployee();
printEmployee(emp);
return 0;
}
现在我的问题是一切正常只有输出不正确。我甚至不能说它是什么。某种随机混合的标志,字母和数字。既然我不知道我的错误在哪里,我会很高兴有任何建议来解决这个问题。谢谢。
我添加了输出的屏幕截图。也许有帮助。
答案 0 :(得分:3)
您正在尝试使用局部变量,该函数在函数返回时不再存在。
int addEmployee(void)
{
struct employeelist employee[5];
/* ... */
}
变量employee仅存在于addEmployee()函数中;每次调用函数时它都是一个不同的对象。
int printEmployee(int emp)
{
struct employeelist employee[5];
/* ... */
}
此employee
与addEmployee中的//employee.h
struct employeelist
{
char last [20];
char first[20];
int pnumber;
int salary;
};
/* add up to `maxemp` employees to the array and
** return number of employees added */
int addEmployee(struct employeelist *, int maxemp);
/* print all employees from index 0 to (nemp - 1) */
int printEmployee(struct employeelist *, int nemp);
无关。
但是现在不要做容易的事(*); 做正确的事:在main()函数中声明数组并传递它。
#include "employee.h"
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main ()
{
int emp;
struct employeelist employee[5];
int emp = addEmployee(employee, 5);
printEmployee(employee, emp);
return 0;
}
在main()中声明一个数组,并将其传递给
{{1}}
(*)不要为员工声明全局变量
编辑employee.h并添加了main()函数
答案 1 :(得分:2)
您的打印功能中有一个全新的变量,甚至没有初始化。因此它只包含垃圾并打印
答案 2 :(得分:2)
问题的核心在于,您正在与三个不同的员工阵列合作,而不是您认为自己拥有的一个阵列。当程序在这些大括号内执行代码时,在C中的一对大括号内声明的任何内容仅“存在”。您已经在三个不同的代码块中声明了三个不同的雇员结构数组。
指向正确的方向(不管这是作业还是自学,这是一个学习练习所以只修复你的代码可能不是你想要的)你应该考虑如何通过< em>相同的员工阵列依次为您的每个功能。 (编辑:pmg打败了我。)
在你的main()函数中声明数组一次,并修改你的两个函数printEmployee()
和addEmployee()
以将该数组作为参数而不是声明它们自己的本地阵列。
这是一个非常简单的示例,使用ints显示参数和返回值如何工作。你必须阅读有关指针的内容,以便将其扩展到你的案例中。
int main() {
int number = 2;
int newNumber;
newNumber = timesTwo(number);
printf("number: %d newNumber: %d", number, newNumber);
}
int timesTwo(int param) {
return param * 2;
}
在开始分解文件并使用结构和指针之前,最好通过在单个文件中构建简单程序来练习函数,参数和变量的概念。
答案 3 :(得分:1)
您在本地向两个函数声明employee
数组,因此它们无法访问彼此的数据。
答案 4 :(得分:1)
正如其他人已经说过的那样,主要问题是你在每个职能中声明struct employeelist employee[5]
。这使得这些变量在其功能中是局部的,因此从一个功能到另一个功能是不可访问的。因此,当printEmployee进行打印时,它正在打印的数据是乱码。
需要解决一些问题:
其他一些建议让你自己更轻松一些:
employee
(或类似内容)和您的数组employeelist
(或类似内容)。答案 5 :(得分:0)
看看..分布均匀,易于阅读,只需要一点点改进就可以变大,做你想做的工作。
typedef struct
{
char last [20];
char first[20];
long int pnumber;
int salary;
}employee;
/* the two functions clearly declared */
int addEmployee(employee const wEmployeeList[]);
void printEmployee( employee const wEmployeeList[], int );
int main()
{
int numberE;
employee employeeList[2];
numberE = addEmployee(employeeList);
printEmployee(employeeList, numberE);
return 0;
}
int addEmployee(employee const wEmployeeList[2]){
int i;
for (i=0; i < 2; i++)
{
printf("Last name: ");
scanf("%s", wEmployeeList[i].last);
printf("First name: ");
scanf("%s", wEmployeeList[i].first);
printf("Personal number: ");
scanf("%ld", &wEmployeeList[i].pnumber);
printf("Salary: ");
scanf("%d", &wEmployeeList[i].salary);
}
return 2;
}
void printEmployee(employee const wEmployeeList[2], int numberEmployee){
int i;
for (i=0; i < numberEmployee; i++)
{
printf("\n\nLast name: %s\nFirst name: %s\nPersonal number: {%ld}\nSalary: {%d}\n \n",wEmployeeList[i].last,wEmployeeList[i].first, wEmployeeList[i].pnumber, wEmployeeList[i].salary);
}
}