我正在学习C并且正在练习功能章节。所以我写了一个包含3个文件和两个小函数的小程序。真诚地说它不起作用。我没有错误,功能根本没有执行,我不知道为什么。
首先,这是我的头文件,它只声明我的功能。
//employee.h
int addEmployee(void);
int printEmployee(int i);
所以下一个文件是用于函数的定义。
//employee.c
#include "employee.h"
#include <stdio.h>
#include <ctype.h>
int numE;
int i;
int addEmployee(void)
{
printf("Please type in the number of your employees: ");
scanf_s("%d", &numE);
i = numE;
return i;
}
int printEmployee(int i)
{
printf("%d", i);
getchar();
getchar();
return i;
}
最后一个文件用于执行功能。
//lab6.c
#include "employee.h"
#include <stdio.h>
#include <ctype.h>
int main ()
{
int addEmployee();
int printEmployee();
return 0;
}
答案 0 :(得分:4)
使用
int main ()
{
int addEmployee();
int printEmployee();
return 0;
}
你基本上是用0个参数声明了2个新函数。
你没有打电话给你的“旧”功能。
这应该有效,正如其他人指出的那样:
int main ()
{
int emp = addEmployee();
printEmployee(emp);
return 0;
}
因为您正在调用addEmployee()
,所以将结果存储到emp
,然后使用emp
打印printEmployee
。由于printEmployee
是使用一个参数声明的,因此您只需将emp
放入其中即可。
答案 1 :(得分:3)
调用函数时,不要将返回类型放在调用前面。该调用只是函数的名称以及您调用它的任何参数。所以你的主要功能应该是这样的:
int main() {
addEmployee();
printEmployee(1);
return 0;
}
编辑:那么在您的employee.c
文件中,您正在尝试使用addEmployee()
从命令行中获取一些员工并将其存储在变量i
中吗?您希望printEmployee()
告诉您输入了多少员工?这是你如何做到的。
//employee.c
#include "employee.h"
#include <stdio.h>
#include <ctype.h>
int i;
int addEmployee(void)
{
int numE;
printf("Please type in the number of your employees: ");
scanf_s("%d", &numE);
i = numE;
}
int printEmployee()
{
printf("%d", i);
getchar();
getchar();
}
这就是我的所作所为。
首先,我将numE
变为使用它的addEmployee函数的本地变量。通常,您应该保持变量范围尽可能小。这意味着将它们降低到使用它们的最低水平。在这种情况下,只有numE
需要addEmployee()
,这就是它的范围。
其次,我从int printEmployee(int i)
中删除了参数。它覆盖了文件级别的i
变量。所以你将numE
中的数字存储在i
中,但是当你输入printEmployee()
时,你创建了一个隐藏它的新的空i
。当您从main调用printEmployee(1)
时,您将值1传递到i
中的printEmployee(int i)
。删除参数后,您将停止隐藏employee.c
的{{1}}。
最后,我删除了退货。函数不必返回C中的任何内容。如果您不打算使用返回,那么只需添加一行代码即可。
在i
文件中,您需要进行一项更改才能完成此项工作。从调用lab6.c
printEmployee()
应该按照你现在的预期方式工作。
答案 2 :(得分:2)
你想要:
int main ()
{
addEmployee();
printEmployee(1);
return 0;
}
答案 3 :(得分:1)
改变这个:
int main ()
{
int addEmployee();
int printEmployee();
return 0;
}
对此:
int main ()
{
addEmployee();
printEmployee();
return 0;
}
您正在重新声明这些功能而不是调用它们。
您还必须将printEmployee
函数更改为不接受整数参数;看起来它应该只使用与addEmployee
相同的全局变量。不过这是一个坏主意;通常要避免全局变量。 addEmployee
应该返回您可以存储的员工ID,然后传入printEmployee
。