在C中操纵结构 - 输入变量

时间:2014-03-31 14:29:33

标签: c struct

我试图写一小部分更大的代码,最终输入一个结构并使用输入的值来做一些船的体积计算。我试图创建一个结构然后在我的函数中(目前我没有函数,而我只是从我的函数中调用它),我想给出结构值。由于最终的音量计算很长,我试图避免使用类似" new_boat.L1"每次我需要使用L1值。为此,我使用以下代码:

#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的值没有被传递到结构中,我不确定如何做到这一点,所以这些值将被保存并可以使用稍后用他们较短的名字叫。希望这个解释有意义!任何帮助将非常感激。提前谢谢!

3 个答案:

答案 0 :(得分:1)

您不会初始化L1L2C。它们包含垃圾,因此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;
}

答案 1 :(得分: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));

希望这会对你有所帮助。

答案 2 :(得分: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;