2014-03-31 34 views
0

我正在嘗試編寫一個較大代碼的一小部分,它將最終輸入一個結構並使用輸入的值來執行一些船的體積計算。我試圖創建一個結構,然後在我的函數(目前我沒有功能,我只是從我的主要調用它),我想給結構值。由於最終的體積計算真的很長,我試圖避免每次需要使用L1值時使用「new_boat.L1」之類的東西。要做到這一點,我用下面的代碼:在C中操作struct - 輸入變量

#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
#include <math.h> 

struct boat { 
    double L1; 
    double L2; 
    double Lhull; 
    double C; 
    double delta; 
    double mass; 
}; 



int main() { 
    // make two people structures 
    struct boat new_boat; 
    double L1, L2, C; 

    new_boat.L1 = L1; 
    new_boat.L2 = L2; 
    new_boat.C = C; 

    L1 = 17.6; 
    L2 = 4; 
    C = sqrt((new_boat.L1*new_boat.L1) + (new_boat.L2*new_boat.L2)); 


    printf("\nL1 = %lf\n L2 = %lf\n, C = %lf\n", L1, L2, C); 


    return 0; 

    } 

我想爲L1,L2和C輸入的值不會被傳遞到結構,我不知道究竟如何這樣做,這些值將被保存,並可以使用,稍後用較短的名稱進行調用。希望這個解釋是有道理的!任何幫助將非常感激。提前致謝!

+0

L1','L2'的'的值,'C'被存儲在該實例'new_boat'結構的(假設已經初始化它們)。你面臨的問題究竟是什麼? –

+0

「我嘗試輸入的值」 - 究竟在哪裏?我看不到任何嘗試輸入的東西。你正在使用L1,L2和C而沒有初始化它們,也許這就是問題所在。 –

回答

1

您不初始化L1,L2C。他們包含垃圾,因此new_boat也將包含垃圾。

這個版本應該按預期工作:

int main() { 
// make two people structures 
    struct boat new_boat; 
    double L1, L2, C; 

    L1 = 17.6; 
    L2 = 4; 
    C = sqrt((L1*L1) + (L2*L2)); 

    new_boat.L1 = L1; 
    new_boat.L2 = L2; 
    new_boat.C = C; 

    printf("\nL1 = %lf\n L2 = %lf\n, C = %lf\n", L1, L2, C); 

    return 0; 
} 
+0

謝謝,我不確定他們需要將值送入結構的順序。 – user3460758

+0

這就是所謂的因果關係;-) –

0
new_boat.L1 = L1; 
new_boat.L2 = L2; 
new_boat.C = C; 

當你這樣做,你不做的局部變量引用結構變量。您正在將局部變量值複製到結構變量中。

如果你想引用結構變量,你可以使用指針,它將指向你的結構變量。像這樣:

struct boat new_boat; 
double *L1, *L2, *C; 

L1 = &new_boat.L1; 
L2 = &new_boat.L2; 
C = &new_boat.C; 

*L1 = 17.6; 
*L2 = 4; 
*C = sqrt((*L1) * (*L1) + (*L2) * (*L2)); 

希望這可以幫助你。

+0

感謝您的支持......我正在使用上面更簡單的版本,但這對未來有用! – user3460758

0

賦值是按值完成的,而不是由變量完成的。例如,當您分配new_boat.L1 = L1時,您尚未將L1設置爲任何值。

嘗試分配new_boat之前設置L1,L2,和C:

L1 = 17.6; 
L2 = 4; 
C = sqrt((L1*L1) + (L2*L2)); 

new_boat.L1 = L1; 
new_boat.L2 = L2; 
new_boat.C = C; 
+0

謝謝,上面給出的建議相同。現在工作! – user3460758