Problem mit Array



  • Ok so schaut das bei mir aus !!!

    #include <iostream>
    using namespace std;
    int main()   
    { 
     int Teilnehmer, i;
     int *Startnummer;
     string *Namen;
     cout << "Wie viele Laeufer haben teilgenommen: ";
     cin  >> Teilnehmer;
     Startnummer = new int [Teilnehmer];
     Namen = new string [Teilnehmer];
     for (i=0; i < Teilnehmer; i++)
     {
      cout << "\nStartnummer: ";
      cin  >> Startnummer[i];
      cout << "Name: ";
      cin  >> Namen[i];
     }
     for (i=0; i < Teilnehmer; i++)
     {
      cout << "Startnummer des Teilnehmers : " << Startnummer[i] << endl;
      cout << "Name des Teilnehmers : " << Namen[i] << endl;
     }
     delete[] Namen; 
     delete[] Startnummer; 
     getchar();
     return 0; 
    }
    

    Bin schon wieder dabei die Funktionen einzubauen !

    Übrigens danke für den Tipp mit endl und \n werde ich dann mal entsprechend anwende. Bei mir in der Berufsschule sind die Computer so alt da sollte man den unterschied merken.



  • der code sieht schon besser aus.
    jedoch:

    du hast #include <string> vergessen

    deine variablen sind noch immer nicht so lokal wie möglich

    du hast das mit endl und '\n' noch nicht übernommen


  • Mod

    Davidlocke13 schrieb:

    Übrigens danke für den Tipp mit endl und \n werde ich dann mal entsprechend anwende. Bei mir in der Berufsschule sind die Computer so alt da sollte man den unterschied merken.

    Das hat eigentlich nichts mit der Grundgeschwindigkeit zu tun, sondern vor allem mit der großen Diskrepanz zwischen der Geschwindigkeit des Hauptspeichers und der Massenspeichermedien und auch damit, wie die Massenspeichermedien intern ihre Daten organisieren. Dieser Unterschied war schon immer sehr groß und ist es heute erst recht (SSDs haben die Situation aber etwas verbessert).

    Auf Bildschirmen ist es, wie erwähnt, ohnehin egal, da die Terminalemulatoren bei jedem Zeilenumbruch automatisch von sich aus flushen. Das heißt natürlich im Umkehrschluss auch, dass ein endl dadurch auch auf dem Bildschirm unnötig ist und man einen guten Grund hat, sich Ausgaben ohne endl anzugewöhnen.

    Allgemeiner Tipp: Auf der US-Tastatur tippt sich das '\n' auch fast genau so einfach wie endl. Überhaupt ist sie sehr gut zum Programmieren, da die Erfinder der Sprachen sie in der Regel selber benutzt haben. Dann versteht man auch, wieso scheinbar so umständlich zu tippende Zeichen wie \/[];' bei Computersprachen so oft vorkommen.



  • So und noch ein versuch:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()   
    { 
     int Teilnehmer, i;
     int *Startnummer;
     string *Namen;
     cout << "Wie viele Laeufer haben teilgenommen: ";
     cin  >> Teilnehmer;
     Startnummer = new int [Teilnehmer];
     Namen = new string [Teilnehmer];
     for (i=0; i < Teilnehmer; i++)
     {
      cout << "\nStartnummer: ";
      cin  >> Startnummer[i];
      cout << "Name: ";
      cin  >> Namen[i];
     }
     cout << "Teilnehmerliste:\n\n";
     cout << "Startnummer:\tName:\n";
     for (i=0; i < Teilnehmer; i++)
     {
      cout << Startnummer[i] << "\t\t";
      cout << Namen[i] << "\n";
     }
     delete[] Namen; 
     delete[] Startnummer; 
     getchar();
     return 0; 
    }
    


  • Wenn du jetzt noch Definition und Deklaration von Teilnehmer und Name zusammenfasst und i in der Schleife deklarierts ist es noch etwas besser.
    so etwa:

    int *Startnummer = new int[Teilnehmer];
    
    for (int i=0; i < Teilnehmer; i++)
    


  • Sagt dir eingetlich dein Compiler, dass Definitionen am Anfang der main stehen müssen? Oder wieso machst du das? 😃


  • Mod

    Grauenhaft, aber innerhalb deiner Beschränkungen wohl das Beste was machbar ist.

    Ich würde die Variablen, insbesondere das i, noch lokaler machen. Du kannst for (int i = 0...) schreiben.

    Dir ist schon klar, dass der Streamoperator >> an Leerzeichen trennt? Könnte für die Namen wichtig sein. Aber wie gesagt, innerhalb deiner Beschränkungen wohl das Beste was machbar ist



  • out schrieb:

    Sagt dir eingetlich dein Compiler, dass Definitionen am Anfang der main stehen müssen? Oder wieso machst du das? 😃

    Ich glaube mein Programm verwendet den Borland C++ Compiler.

    Das habe ich so in der Berufsschule gelernt, so mit der Begründung wenn es ganz am Anfang steht kann man es auch nirgends vergessen !



  • Davidlocke13 schrieb:

    Das habe ich so in der Berufsschule gelernt, so mit der Begründung wenn es ganz am Anfang steht kann man es auch nirgends vergessen !

    Dazu fällt mir nichts mehr ein. 😃 😃



  • #include <iostream>
    #include <string>
    using namespace std;
    int main()   
    { 
     int Teilnehmer;
     int *Startnummer = new int [Teilnehmer];
     string *Namen = new string [Teilnehmer];
     cout << "Wie viele Laeufer haben teilgenommen: ";
     cin  >> Teilnehmer;
     for (int i=0; i < Teilnehmer; i++)
     {
      cout << "\nStartnummer: ";
      cin  >> Startnummer[i];
      cout << "Name: ";
      cin  >> Namen[i];
     }
     cout << "Teilnehmerliste:\n\n";
     cout << "Startnummer:\tName:\n";
     for (int i=0; i < Teilnehmer; i++)
     {
      cout << Startnummer[i] << "\t\t";
      cout << Namen[i] << "\n";
     }
     delete[] Namen; 
     delete[] Startnummer; 
     getchar();
     return 0; 
    }
    

    So jetzt stürzt es aber bei der Eingabe ab!


  • Mod

    Davidlocke13 schrieb:

    Das habe ich so in der Berufsschule gelernt, so mit der Begründung wenn es ganz am Anfang steht kann man es auch nirgends vergessen !

    Ahh, diese Programme kenne ich. Das sind die, wo am Anfang einer Funktion 15 Variablen mit zweibuchstabigem Bezeichner stehen, von denen gerade einmal 5 tatsächlich benutzt werden.



  • Davidlocke13 schrieb:

    #include <iostream>
    #include <string>
    using namespace std;
    int main()   
    { 
     int Teilnehmer;
     int *Startnummer = new int [Teilnehmer];
     string *Namen = new string [Teilnehmer];
     cout << "Wie viele Laeufer haben teilgenommen: ";
     cin  >> Teilnehmer;
     for (int i=0; i < Teilnehmer; i++)
     {
      cout << "\nStartnummer: ";
      cin  >> Startnummer[i];
      cout << "Name: ";
      cin  >> Namen[i];
     }
     cout << "Teilnehmerliste:\n\n";
     cout << "Startnummer:\tName:\n";
     for (int i=0; i < Teilnehmer; i++)
     {
      cout << Startnummer[i] << "\t\t";
      cout << Namen[i] << "\n";
     }
     delete[] Namen; 
     delete[] Startnummer; 
     getchar();
     return 0; 
    }
    

    So jetzt stürzt es aber bei der Eingabe ab!

    joa klar, dann sag mir mal wie gross "Teilnehmer" ist zu dem zeitpunkt, an dem du den speicher reservierst



  • Ah ich habe meine Fehler bemerkt!

    Ich darf meine Arrays ja erst deklarieren wenn Teilnehmer einen Wert bekommen hat. 😉

    #include <iostream>
    #include <string>
    using namespace std;
    int main()   
    { 
     int Teilnehmer;
     cout << "Wie viele Laeufer haben teilgenommen: ";
     cin  >> Teilnehmer;
     int *Startnummer = new int [Teilnehmer];
     string *Namen = new string [Teilnehmer];
     for (int i=0; i < Teilnehmer; i++)
     {
      cout << "\nStartnummer: ";
      cin  >> Startnummer[i];
      cout << "Name: ";
      cin  >> Namen[i];
     }
     cout << "Teilnehmerliste:\n\n";
     cout << "Startnummer:\tName:\n";
     for (int i=0; i < Teilnehmer; i++)
     {
      cout << Startnummer[i] << "\t\t";
      cout << Namen[i] << "\n";
     }
     delete[] Namen; 
     delete[] Startnummer; 
     getchar();
     return 0; 
    }
    


  • Davidlocke13 schrieb:

    ...

    Gut, und jetzt versuchst du das nochmal mit den Funktionen.



  • #include <iostream>
    #include <string>
    using namespace std;
    
    int eigabe(int Teilnehmer, int Startnummer[], string Namen[])
    {
     for (int i=0; i < Teilnehmer; i++)
     {
    {
      cout << "\nStartnummer: ";
      cin  >> Startnummer[i];
      cout << "Name: ";
      cin  >> Namen[i];
     }
     }
    }
    
    int ausgabe(int Teilnehmer, int Startnummer[], string Namen[])
    {
    cout << "Teilnehmerliste:\n\n";
     cout << "Startnummer:\tName:\n";
     for (int i=0; i < Teilnehmer; i++)
     {
      cout << Startnummer[i] << "\t\t";
      cout << Namen[i] << "\n";
     }
    }
    
    int main()
    {
     int Teilnehmer;
     cout << "Wie viele Laeufer haben teilgenommen: ";
     cin  >> Teilnehmer;
     int *Startnummer = new int [Teilnehmer];
     string *Namen = new string [Teilnehmer];
     int *gZeit = new int [Teilnehmer];
     eigabe(Teilnehmer, Startnummer, Namen);
     ausgabe(Teilnehmer, Startnummer, Namen);
    
     getchar();
     return 0;
    }
    

    So ...



  • Davidlocke13 schrieb:

    struct hatte ich auch noch nicht.

    .. aber new 🙄

    Davidlocke13 schrieb:

    out schrieb:

    Sagt dir eingetlich dein Compiler, dass Definitionen am Anfang der main stehen müssen? Oder wieso machst du das? 😃

    [..]
    Das habe ich so in der Berufsschule gelernt, so mit der Begründung wenn es ganz am Anfang steht kann man es auch nirgends vergessen !

    Du kannst mit Deinen Lehrern ja ruhig mal ein Bierchen trinken gehen, vielleicht sind das ja ganz nette Typen, aber erwarte nicht dass sie Dir C++ beibringen - das wird nichts!



  • Fast. Eine Funktion muss etwas zurückgeben, wenn der Rückgabedatentyp nicht void ist. Willst du was zurückgeben?



  • also return 0; oder ganz schnell void draus machen 😉



  • Davidlocke13 schrieb:

    also return 0; oder ganz schnell void draus machen 😉

    Warum denn return 0?
    Du brauchst doch keinen Rückgabewert.
    Also auf jeden Fall void.



  • Nathan schrieb:

    Davidlocke13 schrieb:

    also return 0; oder ganz schnell void draus machen 😉

    Warum denn return 0?
    Du brauchst doch keinen Rückgabewert.
    Also auf jeden Fall void.

    So war das ja auch gemeint 😉


Anmelden zum Antworten