C structs und dynamischer Speicher

Neue Frage »

Auf diesen Beitrag antworten »
Lars C structs und dynamischer Speicher

Meine Frage:
Aufgabe im Anhang, ich komme gerade nicht weiter. Ich glaub, ich muss das Programm nochmal komplett umschreiben.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
#include <stdio.h>
#include <stdlib.h>


typedef struct vek{
	int x;
	int y;
	int z;
}vektoren;
vektoren v;



void useDynAr(int* Pointer1, int* Pointer2, int* Pointer3,int x ,int y, int z)
{
	*Pointer1=x;
	*Pointer2=y;
	*Pointer3=z;
}

void printDynAr(int Pointer4, int Pointer5, int Pointer6)
{
	printf("(%i %i %i)\n",(Pointer4),(Pointer5),(Pointer6));
}

void deleteAr(int* delPointer1,int* delPointer2,int* delPointer3)
{

}

int main()
{
	int a=0;
	char userChoice='q';
	int n=0;
	int* pointer=0;
	do{
	printf("Anzahl Vektoren: %i\n",n);
	for(int s=1;s<=n;s++){
	printDynAr(pointer[a*s-3],(pointer[a*s-2]), (pointer[a*s-1]));}
	printf("[q]uit, [a]dd, [d]elete ->\n ");
	userChoice = getchar();
	if(userChoice=='a'){a+=3;
		printf("Bitte die 3 Elemente (x,y,z) eingeben\n");
		if(n==0){pointer=(int*)malloc(3*sizeof(int));}
		if(n!=0){pointer=(int*)realloc(pointer, a*sizeof(int));}
		scanf("%i",&v.x);
		scanf("%i",&v.y);
		scanf("%i",&v.z);
		useDynAr((pointer+a-3),(pointer+a-2), (pointer+a-1),v.x, v.y, v.z);
		n++;
	

		};	
	if(userChoice=='d'){a-=3;
		deleteAr(pointer+a-3,pointer+a-2, pointer+a-1);
	};

	}while(userChoice!='q');
	
	return 0;

}

Aufgabe im Anhang.


Meine Ideen:
Nichtmal das adden funktioniert x).
Man kann doch auch das struct direkt als Pointer definieren, kann ich dann auch irgendwie die einzelnen Elemente in einem dynamischen Speicher anlegen lassen und dann einfach immer aufrufen? Das wäre bei weitem einfacher, als das so umständlich zu machen. Imo muss ich sie ja immer einzeln abspeichern.
Ich versuch mal, das ganze umzuschreiben.
 
Auf diesen Beitrag antworten »
eulerscheZahl

Habe dir mal das gröbste ausgebessert, denn laut Aufgabenstellung soll der Code ja schön sein smile

Statt eines int-Zeigers habe ich einen vertoren-Zeiger verwendet. Auch die Funktionsargumente sind jetzt vektoren.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
#include <stdio.h>
#include <stdlib.h>

typedef struct vek{
	int x;
	int y;
	int z;
}vektoren;

void useDynAr(vektoren* v, vektoren* content)
{
	v->x = content->x;
	v->y = content->y;
	v->z = content->z;
}

void printDynAr(vektoren v)
{
	printf("(%i %i %i)\n",v.x, v.y, v.z);
}

int main()
{
	vektoren* v = (vektoren*)malloc(sizeof(vektoren));
	int a=0;
	char userChoice='q';
	vektoren* pointer=0;
	do {
		printf("Anzahl Vektoren: %i\n", a);
		for(int s = 0; s < a; s++){
			printDynAr(pointer[s]);
		}
		printf("[q]uit, [a]dd, [d]elete ->\n ");
		userChoice = getchar();
		if(userChoice == 'a'){
			a++;
			printf("Bitte die 3 Elemente (x,y,z) eingeben\n");
			if(pointer == NULL) pointer = (vektoren*)malloc(sizeof(vektoren));
			else pointer = (vektoren*)realloc(pointer, a*sizeof(vektoren));
			scanf("%i", &v->x);
			scanf("%i", &v->y);
			scanf("%i", &v->z);
			useDynAr(&pointer[a-1], v);
		};	
		if(userChoice == 'd') { 
			a--;
			pointer = (vektoren*)realloc(pointer, a*sizeof(vektoren));
		}
	} while (userChoice != 'q');
	free(pointer);	
	return 0;
}
Auf diesen Beitrag antworten »
Lars

Hab auch nen bisschen mit dem -> Operator rumgewerkelt und was funktionierendes rausbekommen. Schönheit liegt im Auge des Betrachters, bloß sieht dein Code leider wirklich schöner aus Zunge raus .
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »