Array füllen



  • Hallo,
    ich hänge gerade:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int *wert = new int; // Pointer auf Heap
        cout << "Wieviel INT-Zahlen wollen Sie eingeben? ";
        cin >> *wert;
        int anzahl[*wert]; // Array anlegen
        for(int k=1;k<=*wert;k++)
        {
         cout << "Bitte Wert " << k << "eingeben:";
         cin >> anzahl[*wert];
        }
        for(int i=1;i<=*wert;i++)
        {
        cout << anzahl[*wert];
    }
        delete wert;
        system ("Pause");
    }
    

    Ich möchte, dass alle eingegebende Zahlen im Array gespeichert werden.
    Nur wenn ich das Array auslese, kommt immer ne 0, bis auf die Eingabe.
    Wo liegt mein Denkfehler?



  • bin auf konsolen programmen ehrlich gesagt nicht so fitt.
    aber könnte es nicht sein das der Pointer auf den Heap einfach zu viel ist?

    es müßte doch reichen einfach nur die int Variable wert zu erstellen.

    int main()
    {
        int Groesse = 1;
        int wert = 0;
        cout << "Wieviel INT-Zahlen wollen Sie eingeben? ";
        cin >> Groesse;
        int anzahl[Groesse]; // Array anlegen
        for(int k=0;k<=Groesse;k++)
        {
            cout << "Bitte Wert " << k << "eingeben:";
            cin >> wert;
            anzahl[k]=wert;
        }
        for(int i=1;i<=wert;i++)
        {
            cout << anzahl[wert];
        }
    
        system ("Pause");
    }
    


  • Du hast die Schleifenvariablen nicht benutzt: *wert verändert sich nicht.
    Außerdem brauchst Du wert auch gar nicht auf den Heap zu legen.
    Das Array mußt Du mit new anlegen (dynamisch), weil erst zur Laufzeit feststeht wie groß es ist.

    int main() {
        int *wert = new int; // Pointer auf Heap
        cout << "Wieviel INT-Zahlen wollen Sie eingeben? ";
        cin >> *wert;
    
        int *anzahl = new int(*wert); // Array anlegen
        for(int k=0;k<*wert;k++) {
    		cout << "Bitte Wert " << k+1 << " eingeben:";
    		cin >> anzahl[k];
        }
    
        for(int i=0;i<*wert;i++) {
    		cout << anzahl[i] << endl;
    	 }
    
        delete anzahl;
        delete wert;
        system ("Pause");
    	 return 0;
    }
    


  • columbo1979 schrieb:

    ...

    int *wert = new int; // Pointer auf Heap
    

    ...

    😮 gruselig *schubber*

    Warum nicht int wert; ?

    Gruß,

    Simon2.



  • Wo der Sinn des Programmes liegt ist zweifelhaft ... aber so sollte es korrekt sein:

    #include <iostream>
    
    int main() 
    {
    	std::cout << "Wieviel Zahlen wollen Sie eingeben? " << std::flush;
    	size_t size = 0;
    	std::cin >> size;
    
    	int* values = new int[size];
    
    	for (size_t value = 0; value < size; ++value) 
    	{
    		std::cout << "Bitte Wert " << (value + 1) << " eingeben: " << std::flush;
    		std::cin >> values[value];
    	}
    
    	for (size_t value = 0; value < size; ++value)
    		std::cout << values[value] << std::endl;
    
    	delete [] values;
    
    	return 0;
    }
    


  • Besser: std::vector und keine manuelle Speicherverwaltung!

    (@(D)Evil und wenn schon überall std, dann auch std::size_t :p)

    #include <iostream>
    #include <vector>
    
    int main() {
    	std::cout << "Wieviel Zahlen wollen Sie eingeben? " << std::flush;
    	std::size_t size = 0;
    	std::cin >> size;
    
    	std::vector<int> values(size);
    
    	for (std::size_t value = 0; value < size; ++value) {
    		std::cout << "Bitte Wert " << (value + 1) << " eingeben: " << std::flush;
    		std::cin >> values[value];
    	}
    
    	for (std::size_t value = 0; value < size; ++value)
    		std::cout << values[value] << std::endl;
    }
    


  • Hi,

    oder gleich ganz dynamisch (wozu sollte eine "Eingabebegrenzung" nutzen ?)

    #include <iostream>
    #include <vector>
    
    int main() {
       std::vector<int> values;
       int actVal;
       std::cout << "Bitte Wert eingeben (Abbruch mit \"Nicht-Zahl\"): " << std::flush;
       while(cin>>actVal) {
          values.push_back(actVal);
          std::cout << "Bitte Wert eingeben (Abbruch mit \"Nicht-Zahl\"): " << std::flush;
       }
    
       std::size_t const size = values.size();
       for (std::size_t value = 0; value < size; ++value)
          std::cout << values[value] << std::endl;
    }
    

    (Ist jetzt nicht langsam Zeit, back_inserter und copy() vorzuschlagen ? 😉 )

    Gruß,

    Simon2.


Log in to reply