main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "function.h"
extern void CalcTax(float Gross, float Deffered, float *FedTax, float *StateTax, float *SSITax);
int main(void)
{
float FedTax, StateTax, SSITax, hours, payrate, defr;
char lastname, firstname;
EmployeeData(&lastname, &firstname, &hours, &payrate, &defr);
printf("%s\n", &lastname);
printf("%s\n", &firstname);
CalcTax(CalcGross(hours, payrate), defr, &FedTax, &StateTax, &SSITax);
printf("Your Gross is: %f\n", CalcGross(hours, payrate));
printf("the Federal Tax is %f\n",FedTax);
printf("the State Tax is %f\n",StateTax);
printf("the SSI Tax is %f\n",SSITax);
return 0;
}
void EmployeeData(char *lastname, char *firstname, float *hours, float *payrate, float *defr)
{
printf("last name?\n");
scanf("%s", lastname);
printf("first name?\n");
scanf("%s", firstname);
printf("hours?\n");
scanf("%f",hours);
printf("payrate?\n");
scanf("%f",payrate);
printf("defr?\n");
scanf("%f",defr);
}
有人可以帮助我使用这段代码吗?我试图获取姓氏和名字输入并将其作为字符串传递给main。但是,当我运行上面的代码时,我只得到随机字母,一次只有1或2个字母而不是全名。我非常感谢任何帮助。
答案 0 :(得分:4)
char lastname, firstname;
仅声明单个字符。如果scanf能够存储多个单个字符,则需要使用array-of-char。
char lastname[42], firstname[42]; /* Assuming max length of names is 41 plus a NUL. */
然后用
打电话EmployeeData(lastname, firstname, &hours, &payrate, &defr);
答案 1 :(得分:3)
char lastname, firstname;
声明char类型的姓氏和名字。
你应该使用
char lastname[MAX_NAME_LENGTH + 1], firstname[MAX_NAME_LENGTH + 1]; /* +1 for \0 */
调用该函数时,请将其命名为:
EmployeeData(lastname, firstname, &hours, &payrate, &defr);
答案 2 :(得分:0)
您将firstname和lastname声明为char而不是char数组,因此它一次只能保存一个char。
另一个重点: 问题的标题是“按值传递”。虽然您按以下方式调用该函数:
EmployeeData(&lastname, &firstname, &hours, &payrate, &defr);
&amp;&amp; charachter实际上是通过引用发送字符串而不是通过值发送字符串,因此在函数外部会注意到函数中值的更改,因为通过值发送更改函数中的变量不会影响调用中的变量功能
答案 3 :(得分:0)
如果你真的想要返回一些东西,为什么你使用的函数没有返回值(void)? 我建议使用字符串数组作为返回值。
如果您想坚持自己的方法,请记住:
C
中的变量仅按值传递。在这种情况下,当输入EmployeeData(...)
时,编译器会生成指针变量的副本,指向内存中的新位置。
你需要使用指向指针的指针来改变函数中main的变量,例如:
EmployeeData(string** lastname,...)
*lastname = "yourstring"