【问题标题】:Manipulating struct in C - inputting variables在 C 中操作结构 - 输入变量
【发布时间】:2014-03-31 14:29:33
【问题描述】:

我正在尝试编写较大代码的一小部分,该代码最终将输入一个结构并使用输入的值对船进行一些体积计算。我正在尝试创建一个结构,然后在我的函数中(目前我没有函数,我只是从我的主函数中调用它),我想给结构值。由于最终的体积计算真的很长,我试图避免每次需要使用 L1 值时都使用“new_boat.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 输入的值没有被传递到结构中,我不确定如何执行此操作,因此这些值将被保存并可供以后使用和调用他们的简称。希望这个解释是有道理的!任何帮助将非常感激。提前致谢!

【问题讨论】:

  • L1L2C 的值存储在结构的实例new_boat 中(假设您已经初始化了它们)。您面临的具体问题是什么?
  • “我要输入的值”——具体在哪里?我看不到任何输入内容的尝试。您正在使用 L1、L2 和 C 而不初始化它们,也许这就是问题所在。

标签: c struct


【解决方案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;
}

【讨论】:

  • 谢谢,我不确定它们需要按什么顺序将值输入结构。
  • 这叫因果关系 ;-)
【解决方案2】:
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));

希望对你有所帮助。

【讨论】:

  • 谢谢...我将使用上面更简单的版本,但这对未来很有用!
【解决方案3】:

赋值是按值完成的,而不是变量。例如,当您分配 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;

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多