Struktur Array in Funktion nutzen?
-
Wenn du schon in deiner Struktur variaben mit den namen time 1, time2.... etc. hast, dann solltest du auch für diese ein Array verwenden.
struct auswertung { int proband; int loesung[5]; long time[5]; };
Du hast zwei Möglichkeiten einem Array zu erstellen:
// 1. Du kennst die maximale Anzahl Elemente (auf dem Stack) int main() { auswertung save[10]; }
// 2. Du kennst NICHT die maximale Anzahl Elemente (auf dem Heap)[Regelfall] int main() { int anzahl; std::cin >> anzahl; auswertung *save = new auswertung[anzahl]; //speicher reservieren //arbeiten mit save delete[] save; //speicher wieder freigeben nicht mehr mit save arbeiten }
In C++ verwendet man Arrays in der Form von C eher selten. Wir können das z.B. mit dem std::vector lösen. Dieser kann dann beliebig viele Elemente halten, ohne new/delete verwenden zu müssen.
#include <vector> //struct einfügen int main() { std::vector<auswertung> save; //Werte einfügen }
Siehe auch: http://www.cplusplus.com/reference/stl/vector/
-
sarah s. schrieb:
ich habe i vorher deklariert als int i=0
und dann wird der Wert hier immer erhöht:...
Zeige bitte deinen Gesamten Code, der Fehler leigt weiter vorne.
-
#include <stdlib.h> #include <iostream.h> #include <conio.h> #include <sys/timeb.h> #include <time.h> //#include "funk.cpp" struct auswertung { int proband; int loesung[5]; long time[5]; }; //int loesung[4]; //long zeit[4]; int frage1(void); int frage2(void); int frage3(void); int frage4(void); int frage5(void); int i; int y; //int proband; auswertung save[i]; int main() { int eingabe=0; cout<<"Psychologisches Institut II" <<endl; cout<<"Teiluntersuchung: 5 Fragen" <<endl; cout<<"<1> Neuen Versuch starten" <<endl; cout<<"<2> Auswertung der Versuche" <<endl; cout<<"<3> Ende" <<endl; cout<<"Ihre Eingabe"<<endl; cin>>eingabe; switch(eingabe) { case 1: cout<<"Bitte geben sie ihre Probandennummer ein: "; cin>>save[i].proband; system ("pause"); do { frage1(); frage2(); frage3(); frage4(); frage5(); cout<<"neuer Test? (1=ja, 0=Nein)"; cin>>y; i++; } while(y !=1); break;
-
sarah s. schrieb:
#include <stdlib.h> #include <iostream.h> #include <conio.h> #include <sys/timeb.h> #include <time.h> //#include "funk.cpp"
In C++ heißen die Header <iostream>, <cstdlib> und <ctime>. (Die Funktionen liegen dann im Namespace std)
int i; int y; //int proband; auswertung save[i];
Arrays mit variabler Länge (VLAs) gibts in C++ nicht. Das heißt, i muss eine Compilezeit-Konstante sein, z.B. 5. Das besagt auch die Fehlermeldung, und das haben auch mehrere Vorposter schon geschrieben.
Oder du musst eben ein dynamisches Array (C-Style) oder einen Container wie std::vector (C++-Style) verwenden.
-
auswertung save[i];
funktioniert nur, wenn der Compiler VLAs als Erweiterung unterstützt. Und selbst wenn es funktioniert, wird die Größe des Arrays nicht auf magische Weise an i gebunden, d.h. der Compiler legt immer ein Array der Größe 0 an (weil i zum Zeitpunkt der Definition 0 ist), welche Werte i danach bekommt, interessiert nicht.
Nimmstd::vector
, den kannst du beliebig vergrößern.
-
Danke für eure Hilfe dann werde ich mich wirklich dannn in Vektoren einarbeiten und hoffen das ich das hinbekomme, aber danke für eure Ratschläge.
-
Kannste nicht einfach Excel für die Auswertung nehmen? Oder ist das eine Übungsaufgabe zum C++ lernen?
-
ipsec schrieb:
d.h. der Compiler legt immer ein Array der Größe 0 an (weil i zum Zeitpunkt der Definition 0 ist)
Nein. der Wert von i ist unspezifiziert weil nicht initialisiert.
-
omglol schrieb:
Kannste nicht einfach Excel für die Auswertung nehmen? Oder ist das eine Übungsaufgabe zum C++ lernen?
Das ist leider eine Übungsaufgabe und ich hab im moment voll die Denkblockade nach 8 Std. Programmieren...
-
pumuckl schrieb:
ipsec schrieb:
d.h. der Compiler legt immer ein Array der Größe 0 an (weil i zum Zeitpunkt der Definition 0 ist)
Nein. der Wert von i ist unspezifiziert weil nicht initialisiert.
Ich hatte mich auf das Zitat "ich habe i vorher deklariert als int i=0" bezogen und nicht auf den Quelltext, aber da du es sagst: gab es da nicht die Regel, dass globale (Builtin-)Variablen ohne Initialisierung den Wert 0 erhalten (im Gegensatz zu lokalen, die unspezifiziert sind)?