lokales Strukturarray an Funktion übergeben
-
HI,
ich moechte ein lokal (nicht global!!!) deklariertes Struktuarray aus der main() als Pointer an eine Funktion weitergeben. Kann mir einer helfen?
Habe den hier angegebenen Teil meines Quellodes mit Visual C geschrieben.#include <stdio.h> #include <process.h> #include <string.h> struct festplatte { char hersteller[30]; float kapazitaet; int cache; int upm; float einzelpreis; }; void festpl_eingabe(struct festplatte*); void main() { struct festplatte platte_nr[100]; festpl_eingabe(&platte_nr[100]); fflush(stdin); getchar(); } void festpl_eingabe(struct festplatte* platte_nr[100]) { int i; int auswahl; do{ system ("cls"); printf ("Bitte geben Sie an, für welche Fetsplatte sie Werte\neingeben moechten."); printf ("\n\nMoegliche Eingaben (1 -100)\nEingabe: "); scanf ("%i", &i); i = i-1; printf ("\n\nBitte Hersteller-Namen eingeben:"); fflush(stdin); gets (platte_nr[i]->hersteller); printf ("\n\nBitte Kapazitaet eingeben: "); fflush(stdin); scanf ("%f", &platte_nr[i]->kapazitaet); printf ("\n\nBitte Cache-groesse angeben: "); fflush(stdin); scanf ("%i", &platte_nr[i]->cache); printf ("\n\nBitte Anzahl der Rotationen pro Minute eingeben: "); fflush(stdin); scanf ("%i", &platte_nr[i]->upm); printf ("\n\nBitte Preis pro Stueck angeben: "); fflush(stdin); scanf ("%f", &platte_nr[i]->einzelpreis); printf ("\n\n\nMoechten Sie einen weiteren Datensatz eingeben?"); printf ("\n[1] - Ja\n[2] - Nein"); printf ("\n\nAuswahl: "); scanf ("%i", &auswahl); }while (auswahl == 1); }
-
void festpl_eingabe(struct festplatte*); ... void festpl_eingabe(struct festplatte* platte_nr[100])Diese Funktionsdefinition passt nicht zum Prototyp, das heißt, du erzeugst damit eine neue Überladung der Funktion - die ursprüngliche Funktion wird dagegen nicht definiert. Die Lösung ist ganz simpel - lass das [100] dort weg (das bringt sowieso keinen Gewinn).
-
Erstmal danke für deine schnelle Hilfe, aber ich fürchte du versthst nicht ganz, was ich eigentlich wollte.
Das Strukturarry muss so sein, daran gibbet nischt zu rütteln.
Aber, wie funktioniert die übergabe, per <<Call by Reference>> Verfahren, so wie hier angedeutet.Normalerweise sieht sowas ja so aus
struct struktur { float var1; float var2; float array1[100]; float array2[100]; }; void function (struct struktur *); void main() { struct struktur strukturvariable; function (&strukturvariable); } void function (struct struktur * strukturvariable) { strukturvariable->array1[0] = 100; printf ("%f", strukturvariable->array1[0]); }Angenommen die Strukturvariable wäre ein Array, wie könnte ich diese dann per Pointer, an function "übergeben"?
MfG Die Eule
-
Genau so, wie Du's tust:
(BTW: Die ganzen "struct"s braucht's in C++ nicht und printf() auch nicht)
Die Eule schrieb:
...
#include <iostream> struct struktur { float var1; float var2; float array1[100]; float array2[100]; }; void function (struktur *); void main() { struktur strukturvariable[10]; function (strukturvariable); } void function (struktur* strukturvariable) { for(int i=0; i<10; ++i) { strukturvariable[i]->array1[0] = 100; std::cout << strukturvariable[i]->array1[0]; } }(OK, ein "&" habe ich gelöscht)
Ach ja und wo wir schon "C++-isieren": Warum nicht gleich std::vector ?
Gruß,
Simon2.
-
Auch dir ein Dankeschön für deine Antwort.
Mir ist bekannt, das es auch anders, und leichter ^^ geht, aber leider ist dies ein "Hausaufgabe" aus der Schule, deshalb musten wir es so machen ... Lehrer.
-
Die Eule schrieb:
Auch dir ein Dankeschön für deine Antwort.
Mir ist bekannt, das es auch anders, und leichter ^^ geht, aber leider ist dies ein "Hausaufgabe" aus der Schule, deshalb musten wir es so machen ... Lehrer.Verleih' ihm die "Goldene Himbeere des C++-Forums" ! Da ist in schlechter aber reichhaltiger Gesellschaft ... wenn er vorgibt, C++ zu unterrichten, sollte er das auch tun. :p
Wenn das natürlich ein "C-Kurs" ist, ist das was Anderes....Aber mal zurück zum Thema: Ist denn Deine Frage jetzt beantwortet ?
Ich sehe an meinem Code nichts, was Deinem Lehrer sauer aufstoßen könnte....Gruß,
Simon2.