c - 在结构类型中填充 4 个变量并使用 malloc

标签 c pointers struct malloc

我需要编写一个简单的程序,要求用户在结构变量数据中插入4个 double 类型变量。

   struct Data  
    {
      double a;
      double b;
      double c;
      double average;
    };
struct Data *ptr_name;
int i;

首先,询问用户尺寸:

 printf("Please enter the size:");
 scanf("%d", &size);

然后,使用malloc。 (我不知道怎么用...)

类似这样的... ptr_name = ()malloc();

然后使用for循环从用户那里获取a、b、c。

for(i = 0; i < size; i++)
{
 //dont know how to put the staement..
}

最后,打印出所有内容,包括平均值。

for(i = 0; i < size; i++)
    {
     //same as above...
    }

差不多就这些了,我现在正在学习struct type和malloc,浏览网页看不懂……求助,谢谢。

最佳答案

malloc 的调用应该是:

ptr_name = malloc (sizeof (struct Data) * size);

以下函数从控制台读取/写入struct Data实例:

static struct Data 
read_from_console ()
{
  struct Data d;

  d.a = 0.0f; d.b = 0.0f; d.c = 0.0f; d.average = 0.0f;
  printf ("Enter values separated by comma: (a, b, c): ");
  fflush (stdout);
  if (scanf ("%lf, %lf, %lf", &d.a, &d.b, &d.c) != 3)
    {
      printf ("Invalid input\n");
      exit (1);
    }
  else
    d.average = (double) ((d.a + d.b + d.c) / 3.0f);
  return d;
}

static void
print_to_console (struct Data* d)
{
  printf ("a=%f, b=%f, c=%f, average=%f\n", d->a, d->b, d->c, d->average);
  fflush (stdout);
}

您可以从 main 函数内的循环调用它们:

int
main ()
{
  struct Data *ptr_name;
  int count;
  int i;

  printf ("Please enter size: ");
  fflush (stdout);
  if (scanf ("%d", &count) != 1)
    {
      printf ("Invalid input\n");
      return 1;
    }
  ptr_name = malloc (sizeof (struct Data) * count);

  for (i = 0; i < count; ++i)
    ptr_name[i] = read_from_console ();

  for (i = 0; i < count; ++i)
    print_to_console (&ptr_name[i]);

  return 0;
}

交互示例:

> Please enter size: 2
> Enter values separated by comma: (a, b, c): 12.00, 12.45, 13.00
> Enter values separated by comma: (a, b, c): 5.4, 5.00, 5.1
a=12.000000, b=12.450000, c=13.000000, average=12.483333
a=5.400000, b=5.000000, c=5.100000, average=5.166667

关于c - 在结构类型中填充 4 个变量并使用 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3964297/

相关文章:

c - 带指针的语句似乎缺少运算符

c++ - 为什么指针以半字节而不是数组中的字节递增?

c - 为什么结构占用的空间比它需要的多?

找不到部分 .dtors

c++ - 在 c/c++ 中输入比 scanf for int 更快

c - 使用 Ollydbg,谁能告诉我变量 "a"的地址是什么?

C++:关于释放内存的问题

c - 声明一个字符数组 VS 在 C 中为字符数组动态分配空间

c# - 超过 16 字节的结构的最佳解决方案

c - 当在另一个文件中声明结构时,如何使用结构作为函数的参数?