函数按值传递,多个字符串作为参数

时间:2014-10-28 09:20:55

标签: c c-strings

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个字母而不是全名。我非常感谢任何帮助。

4 个答案:

答案 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"