У меня есть огромная проблема, которую я пробовал решать разными способами, но не смог найти решение.Работа с указателями и структурами
Что я должен сделать, это:
- создать функцию для введения 2 устанавливает
- другой функции для отображения этих наборов
Необходимо использовать структуру, компоненты которого будут :
- количество элементов для соответствующего набора;
указатель (для хранения элементов этих двух комплектов);
Я не знаю почему, но когда я выполняю программу (представленную ниже), второй элемент первого набора не отображается. Пожалуйста, если у вас есть время, вы можете помочь мне найти проблему. Это действительно расстраивает, когда все кажется прекрасным, и все же программа не работает. Большое спасибо !!!
В заголовке у меня есть:
#ifndef L8_3H_H_
#define L8_3H_H_
struct Set
{
unsigned int card;
double *p[2];
};
typedef struct Set MULTIME;
MULTIME *introduce_data();
void showSet(MULTIME *m, int j);
#endif /* L8_3H_H_ */
В главный у меня есть:
#include "L8_3h.h"
#include <stdio.h>
int main(void)
{
MULTIME *mult;
mult = introduce_data();
showSet(mult, 0);
showSet(mult, 1);
return 0;
}
Мои функции являются:
#include "L8_3h.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void showSet(MULTIME *m, int j)
{
int i;
if (j == 0)
{
printf("\nA = {");
}else
{
printf("\nB = {");
}
for (i = 0; i < (m + j)->card; ++i)
{
printf("%lf", *((m + j)->p[j]+i));
if (i != (m + j)->card - 1)
{
printf(", ");
}
}
printf("}");
}
MULTIME *introduce_data()
{
MULTIME *mult = (MULTIME*)malloc(sizeof(MULTIME));
int i, j;
for (i = 0; i < 2; ++i)
{
printf("\nIntroduce the number of elements of set %d", i + 1);
scanf("%u", &(mult + i)->card);
(mult+i)->p[i] = (double*)malloc(sizeof(double)*((mult+i)->card));
printf("\nIntroduce the element of set %d\n", i+1);
for (j = 0; j < (mult + i)->card; ++j)
{
scanf("%lf", ((mult + i)->p[i]+j));
//It's interesting that when I put a printf right after introducing the
//element everything is fine(I get the right element)
}
}
printf("\nHeres the problem");
printf("\nThis should not be zero: %lf", *((mult + 0)->p[0]+1));
return mult;
}
Большое спасибо. Ваш ответ был очень полезен. Проблема с моей программой была действительно тем, что вы заметили: я работал с «mult» (который был объявлен как один тип элемента MULTIME), как будто с массивом из двух элементов. В тот момент, когда я изменил MULTIME * mult = (MULTIME *) malloc (sizeof (MULTIME)) "MULTIME * mult = (MULTIME *) malloc (sizeof (MULTIME) * 2) все прошло хорошо. Спасибо. –