Заполнение 4 переменных в типе структуры и использование malloc - PullRequest
0 голосов
/ 19 октября 2010

Мне нужно написать простую программу, которая попросит пользователя вставить 4 переменные двойного типа в данные структурных переменных.

   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, не могу понять, просматривая веб-страницы... помогите, спасибо.

Ответы [ 2 ]

0 голосов
/ 19 октября 2010

Звонок на 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
0 голосов
/ 19 октября 2010

Начните с

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

См. wikipage на malloc

...