Array kann nicht ausgegeben werden?



  • Hallo,
    ich bin relativ neu in C++. Dieses Programm sollte eigentlich eine Liste erstellen, welche mit dem Input des Users gefüllt ist. Leider gibt es nur eine leere Liste aus. Was habe ich falsch gemacht?

    #include <iostream>
    int main() {
    	int anzahl, i = 1, zahl;
    	int array[anzahl];
    	std::cout << "Geben Sie ein, wieviele Zahlen Sie hinzufügen möchten: ";
    	std::cin >> anzahl;
    	do {
    		std::cout << "Geben Sie die " << i << ". Zahl ein." << std::endl;
    		std::cin >> array[i - 1];
    		i++;
    
    	} while(i <= anzahl);
    	std::cout << array << std::endl;
    }
    


  • @redexception sagte in Array kann nicht ausgegeben werden?:

    int array[anzahl];

    anzahl hat keinen definierten Wert. In C ++ muss der Wert sogar zur Compilezeit bekannt sein. Benutze std::vector, nicht C -Style Arrays.



  • Nochmal zu dem was @manni66 schon geschreiben hat:

    @redexception sagte in Array kann nicht ausgegeben werden?:

    int array[anzahl];
    

    In Standard C++ kompiliert das nichtmal. Dazu ist eine GCC Erweiterung nötig die "variable length arrays" (ein C Feature) auch in C++ erlaubt.

    Davon abgesehen wird das an der Stelle ausgewertet wo es steht. D.h. Das Array array hat dann so viele Elemente wie der Wert von anzahl zum Zeitpunkt dieser Definition war. Und dieser Wert ist eben undefiniert. Dass du anzahl danach einen anderen Wert zuweist spielt dann keine Rolle mehr. Die Definition von array ist bereits erfolgt, und die Grösse von array ändert sich nicht magisch nur weil du danach anzahl veränderst.


    std::cout << array << std::endl;
    

    Das gibt nicht den Inhalt des Arrays aus, sondern die Adresse des ersten Array-Elements.

    Die C++ Iostreams bieten keine Funktion an um Arrays auszugeben. Dafür aber eine um Zeiger auszugeben. Bei std::cout << array greift dann die Regel dass Arrays implizit in einen Zeiger auf ihr erstes Element konvertiert werden können - und so wird dann die Funktion zum Ausgeben von Zeigern aufgerufen.



  • @manni66 sagte in Array kann nicht ausgegeben werden?:

    Benutze std::vector, int C -Style Arrays.

    Ich denke ich weiss was du meinst, aber der Satz für sich genommen ist für mich nicht verständlich.



  • @hustbaer sagte in Array kann nicht ausgegeben werden?:

    @manni66 sagte in Array kann nicht ausgegeben werden?:

    Benutze std::vector, int C -Style Arrays.

    Ich denke ich weiss was du meinst, aber der Satz für sich genommen ist für mich nicht verständlich.

    Da hat wohl wieder die Autokorrektur zugeschlagen


Log in to reply