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.
    Nimm std::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)?


Anmelden zum Antworten