2014-10-28 33 views
-3

的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); 
} 

有人可以幫我這個代碼,我試圖讓姓氏和名字輸入,並把它傳遞給主爲字符串。但是,當我運行上面的代碼時,我只能得到隨機字母,並且只有一個或兩個字母一次不是全名。我將不勝感激任何幫助。

回答

0

您將firstname和lastname聲明爲char而不是char數組,因此它一次僅包含一個char。

另一個重點: 問題的標題是「按價值傳遞」。雖然你在下面的方式調用該函數:

EmployeeData(&lastname, &firstname, &hours, &payrate, &defr); 

的& charachter實際參考發送字符串,而不是按價值計算,因此在該函數的值的變化將在功能放在附近外界注意到通過改變函數中的變量的值發送不會影響調用函數中的變量。

4
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); 
3

char lastname, firstname; DECLARE名字和類型char的姓名打電話。你爲什麼要使用函數沒有返回值(空),如果你真的想要回東西

EmployeeData(lastname, firstname, &hours, &payrate, &defr); 
0

您應該使用

char lastname[MAX_NAME_LENGTH + 1], firstname[MAX_NAME_LENGTH + 1]; /* +1 for \0 */ 

當調用該函數,這樣稱呼它? 我建議使用字符串數組作爲返回值。

如果你想堅持你的方法,請記住: 變量C只傳遞值。在這種情況下,當輸入EmployeeData(...)時,編譯器會生成指針變量的副本,它指向內存中的新位置。

你需要爲了改變你的功能從主要變量使用指針的指針,例如: EmployeeData(string** lastname,...)

*lastname = "yourstring"

相關問題