[C/C++] Alternative für Feld zurückgeben?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Leon, 6. Januar 2009 .

  1. 6. Januar 2009
    Alternative für Feld zurückgeben?

    Hi,

    bin gerade dabei eine Funktion zu schreiben die mir Strings aus einer Datei liest und die jeweiligen Informationen in ein double Array meines eigenen Datentyps. Nun müsste ich ja Theoretisch das ganze Array meines Datentyps zurückgeben wenn ich daraus eine Funktion mit Rückgabewert basteln will.
    Hier mal mein Quellcode den ich in eine Funktion mit Rückgabe umwandeln will:

    Code:
     int n;
     NamedComplex nc[100];
     FILE* input; 
     input=fopen("test.txt","r");
     n=fileReadNumber(input);
     for(int i=0;i<n;i++)
     {
     nc[i]=fileReadNamedComplex(input);
     }
     printNamedComplex(nc[1]);
    
    In der fileReadNumber lese ich die erste Zeile einer Datei aus und in fileReadNamedComplex die restlichen Zeilen.
    Rückgabetyp ist einmal int und mein eigener Datentyp NamedComplex.
    Mit printNamedComplex wird der Inhalt der Variable ausgegeben.

    Wie kann ich das ganze am besten in eine Funktion packen sodass ich ein array erhalte ohne aber ein array zurückzugeben, da dies ja nicht geht oder? Ach ja: ich darf/will keine Zeiger benutzen.
     
  2. 7. Januar 2009
    AW: Alternative für Feld zurückgeben?

    Du kannst das ganz einfach per Argument machen:

    Code:
    NamedComplex nc[100];
    int iCount = 100;
    
    fileRead( nc, &iCount );
    Wobei iCount am Ende die maximale Anzahl der gelesenen Strukturen/Klassen bekommt.
     
  3. 7. Januar 2009
    AW: Alternative für Feld zurückgeben?

    hmm, damit bekomm ich ja aber nicht die Werte zurückgeliefert oder?
    Ein paar weitere Informationen: mein Datentyp NamedComplex besteht aus 3 Variablen
    1 String und 2 Double Werten.
    Bisher lese ich die Informationen aus der Datei folgendermaßen aus:
    Komplette Zeile in einen String , diesen String dann in den Datentyp umwandeln und
    dann zurückgeben. gerne würde ich alle ausgelesenen Sachen auf einmal zurückgeben.
    Hab mir schon überlegt einen neuen Datentyp anzulegen der dann einfach ein Array von meinem
    jetzigen Datentyp generiert, wäre dass denn Ressourcenmäßig gut oder schränkt dass die Geschwindigkeit eines Programms ein?
     
  4. 26. Januar 2009
    AW: Alternative für Feld zurückgeben?

    wenn du zeiger nicht magst, benutze globale variablen. bei koplexen sachen helfen dir auch globale varibalen nicht z.B. socket-, treiber-, system-programmierung.

    Code:
    #define DEF_MAX 100
    
    using namespace std;
    
    NamedComplex glob_nc[DEF_MAX];
    int glob_n = 0;
    
    void getNamedComplex(char*, char*);
    
    int main ( void )
    {
     getNamedComplex( "test.txt", "r" );
     system( "PAUSE" );
     return 0;
    }
     
    void getNamedComplex( char *file, char *mode )
    {
     FILE *input; 
     if( (input = fopen(file, mode)) == NULL )
     {
     cout<<"can't open file, press any key...";
     system( "PAUSE" );
     exit 0;
     }
     glob_n = fileReadNumber(input);
     
     for( int i = 0; i < glob_n; i++ )
     {
     nc[i]=fileReadNamedComplex(input);
     printNamedComplex(nc[i]);
     } 
    }
     
  5. 26. Januar 2009
    AW: Alternative für Feld zurückgeben?

    Globale Variablen sollte man aber vermeiden. Ich würde das ganze mit Referenzen lösen:

    Code:
    void getNamedComplex(std::vector<NamedComplex> &nc)
    {
     //hier die werte einlesen.
    }
    
    std::vector<NamedComplex> values;
    
    getNamedComplex(values);
    
    // ganz normal mit values weiterarbeiten.
    for (std::vector<NamedComplex>::iterator i = values.begin(); i != values.end(); ++i)
    {
     NamedComplex nc = *i;
     std::cout << nc.wert1 << std::endl;
    }
    
    @eliminator: Hast du gefallen daran, ältere Threads rauszusuchen? ^^

    edit: Programmierst du in C oder C++? ^^
     
  6. 26. Januar 2009
    AW: Alternative für Feld zurückgeben?

    hi,

    ich bin neu im forum und kenne mich nicht so gut aus. hab halt die ersten zwei seiten gelsen, ob neu oder alt hatte nicht darauf geachtet.

    also c/c++ ist kein großer unterschied wenn es um so simple sachen geht. wenn du meinst dass ich in c++ forum alle beispiele in c++ schreiben soll, ok, hab verstanden.

    er will eine einfache lösung haben, mit stl verwirrst du ihn nur. außerdem deine lösung hat zeiger. und seine nächste farge wird wohl "was ist iterrator" sein xD.
     
  7. 27. Januar 2009
    AW: Alternative für Feld zurückgeben?

    Aso sry
    Das mit "Programmierst du in C oder C++?" sollte eigentlich an den Threadersteller gerichtet sein. Wenn er in C programmiert, dann kanner die STL natürlich vergessen. Ansonsten wäre es sinnvoll, sich die STL und Stdlib anzuschauen, damit kommt man nämlich echt weiter..

    Sry nochmal
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.