Array mit einer Variablen, statt einer Konstanten...



  • Hallo zusammen,

    ich bin ein Neuling in Sachen Programmierung und bräuchte Hilfe. Ich lese das Buch "C++ Programmieren für Einsteiger" und bin bei Schleifen angekommen. Hier wird ein Beispiel angegeben welches eine Variable für die Anzahl der Felder eines Arrey benutzt, anstatt einer Konstanten. Dies vermag mein Compiler nicht zu verstehen und ich auch nicht. Mein Compiler (Visual Studio) und als Workloads nutze ich "Entwicklung für die universelle Windows-Plattform".

    Hier das Programm:

    #include <iostream>
    #include <algorithm>
    #include <string>
    using namespace std;

    int main()
    {
    int anzahl, i = 1;
    cout << "Wie viele Werte m\224chten Sie eingeben?";
    cin >> anzahl;
    int array[anzahl]; //"anzahl" wird als Fehlermeldung ausgegeben
    while (i <= anzahl)
    {
    cout << "Geben Sie den " << i << ". Wert ein: ";
    cin >> array[i - 1];
    i++;
    }
    }

    Fehlercode: Der Ausdruck muss eine Konstante aufweisen.

    Bitte eine kurze Erläuterung mit einer Alternative wie ich dieses Programm zum laufen bekomme, danke.



  • @Farron sagte in Array mit einer Variablen, statt einer Konstanten...:

    "C++ Programmieren für Einsteiger"

    Von Michael Bonacina?

    Der Compiler hat Recht, das Buch ist fehlerhaft. Diese Art von arrays (VLA variable lenght array) gibt es in C, nicht aber in C++. Einige Compiler übersetzten soetwas unter Umständen dennoch.



  • Und die Lösung in C++ lautet https://en.cppreference.com/w/cpp/container/vector

    Statt:

    int array[anzahl]; //"anzahl" wird als Fehlermeldung ausgegeben
    

    schreibst du:

    std::vector<int> array(anzahl);
    

    (und oben #include <vector>)

    Wenn du std::vector benutzt, brauchst du auch nicht am Anfang abzufragen, wie viele Werte gelesen werden sollen, sondern du könntest einfach solange push_back benutzen, bis der Benutzer keine Zahl mehr eingibt. Sie die Dokumentation zu std::vector, einer der wichtigsten Klassen in C++ (wenn nicht sogar die mit Abstand wichtigste Klasse!).



  • Erstmal: Wenn du deinen Code markierst und auf </> klickst, wird der code ordentlich formatiert.

    Das Problem liegt an int array[anzahl]. Da es sich um ein Array fester Größe handelt, muss anzahl zur Kompilationszeit bekannt sein. Hier würde man z.B. einen std::vector<int>benutzen.

    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>
    
    
    int main()
    {
      int anzahl, i = 1;
      std::cout << "Wie viele Werte moechten Sie eingeben?";
      std::cin >> anzahl;
      std::vector<int> arr(anzahl); //"anzahl" wird als Fehlermeldung ausgegeben
      while (i <= anzahl)
      {
        std::cout << "Geben Sie den " << i << ". Wert ein: ";
        std::cin >> arr[i - 1];
        i++;
      }
    }
    

    Wenn das Beispiel so 1:1 aus dem Buch stand, würde ich mich vlt nach einem besseren Buch umgucken.



  • Danke für die schnellen und hilfreichen Antworten.



  • @Farron sagte in Array mit einer Variablen, statt einer Konstanten...:

    "C++ Programmieren für Einsteiger

    Ich habe mal einen Blick in das Buch geworfen und einige Quelltexte überflogen. Kapitale Böcke habe ich dabei nicht gefunden, aber gut sind die Beispiellösungen nicht. Mustergültige Lösungen sehen anders aus, guck dir mal die Buchempfehlungen hier im Forum an. C++ hat eine steile Lernkurve, da sollte man besser etwas Geld in die Hand nehmen und in ein gutes Buch investieren.


Log in to reply