函数传值与多个字符串作为参数
问题描述:
的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);
}
有人可以帮我这个代码,我试图让姓氏和名字输入,并把它传递给主为字符串。但是,当我运行上面的代码时,我只能得到随机字母,并且只有一个或两个字母一次不是全名。我将不胜感激任何帮助。
答
您将firstname和lastname声明为char而不是char数组,因此它一次仅包含一个char。
另一个重点: 问题的标题是“按价值传递”。虽然你在下面的方式调用该函数:
EmployeeData(&lastname, &firstname, &hours, &payrate, &defr);
的& charachter实际参考发送字符串,而不是按价值计算,因此在该函数的值的变化将在功能放在附近外界注意到通过改变函数中的变量的值发送不会影响调用函数中的变量。
答
char lastname, firstname;
只声明单个字符。如果scanf应该能够存储多个单个字符,则需要使用char-array。
char lastname[42], firstname[42]; /* Assuming max length of names is 41 plus a NUL. */
然后用
EmployeeData(lastname, firstname, &hours, &payrate, &defr);
答
char lastname, firstname;
DECLARE名字和类型char的姓名打电话。你为什么要使用函数没有返回值(空),如果你真的想要回东西
EmployeeData(lastname, firstname, &hours, &payrate, &defr);
答
:
您应该使用
char lastname[MAX_NAME_LENGTH + 1], firstname[MAX_NAME_LENGTH + 1]; /* +1 for \0 */
当调用该函数,这样称呼它? 我建议使用字符串数组作为返回值。
如果你想坚持你的方法,请记住: 变量C
只传递值。在这种情况下,当输入EmployeeData(...)
时,编译器会生成指针变量的副本,它指向内存中的新位置。
你需要为了改变你的功能从主要变量使用指针的指针,例如: EmployeeData(string** lastname,...)
*lastname = "yourstring"