Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen



  • @adii950: Du möchtest also ein dynamisches Array (das man bei Bedarf vergrößern kann). So etwas (wie z.B. std::vectorin C++) gibt es standardmäßig nicht in der C-Library.

    Du könntest selber mittels malloc und realloc so eine Datenstruktur erstellen, einfacher (bes. für Anfänger) ist jedoch eine maximale Größe des Arrays vorzugeben und einen Zähler für die aktuelle Größe benutzen.



  • @Th69 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:

    Du möchtest also ein dynamisches Array (das man bei Bedarf vergrößern kann).

    @adii950:
    Wenn das stimmt, dann benutze std::vector



  • @Belli: Ich bin irgendwie davon ausgegangen, daß er nur C macht (wegen "C-Array"), aber jetzt sehe ich, daß er ja C++ (cout, cin) benutzt - war wohl noch etwas früh für mich heute morgen?!?



  • 😄
    Mir ist noch gar nicht klar, was er wirklich will 🤔



  • @Th69 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:

    Ich bin irgendwie davon ausgegangen, daß er nur C macht (wegen "C-Array"), aber jetzt sehe ich, daß er ja C++ (cout, cin) benutzt.

    Wird wohl - wie so oft - am Lehrer liegen.

    @Belli sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:

    😄
    Mir ist noch gar nicht klar, was er wirklich will 🤔

    Wird wohl ein XY Problem sein.
    https://de.wikipedia.org/wiki/XY-Problem?wprov=sfti1



  • @DirkB hmm 😕 okay also ich hab das jetzt geschafft du hattest recht gehabt ich habe jetzt einen Counter benutzt welches immer hoch zählt sobald in dem array ein Wert speichere danach wird das Menü wieder angezeigt und dann wenn ich wieder den Buchstaben 'i' drücke dann wird der nächste wert in Postion [1] gespeichert und dann wird wieder der Counter um eins erhöht und der nächste wert in Position 2 und immer so weiter schau mal so habe ich es jetzt gelöst: hoffe das es jetzt verständlich war 😅😄

     //Variable erstellen
        char eingabe;
        int array_einlesen;
        int counter = 0;
    
        //Array erstellen von 0 bis 4
        int c_array [5] = {0};
    
        //do-while schleife damit die eingabe von menü eingelesen wird
        do{
        //menue erstellen:
        cout << "Eingabe eines neuen Werts mit einem kleinen 'i' oder mit einem grossen 'I' " << endl;
        cout << "Gibt die Anzahl der belegten Felder aus mit einem kleinen 's' oder mit einem grossen 'S' " << endl;
        cout << "Gibt alle belegten Felder aus mit einem kleinem 'o' oder mit einem grossem 'O " << endl;
        cout << "Beendet das Programm mit einem kleinem 'q' oder mit einem grossen 'Q' " << endl;
        cout << "Bitte geben Sie ihre Eingabe ein: " << endl;
        cin >> eingabe;
    
    
        //menue eingaben:
        switch (eingabe){
            //Eingabe eines neuen Werts
            //ein kleines i oder ein großes I wird hier Abgefangen
            case 'i':
            case 'I': {
    
                cout << "Bitte füllen Sie ihre Felder: " << endl;
                //C-Array wird gefüllt
                cin >> array_einlesen;
                c_array[counter] = array_einlesen;
                counter++;
            }
                break;
    
    
    
                //Gibt die Anzahl der belegten Felder aus.
                case 's':
                case 'S':{
    
                    cout << "array " << c_array[0] << "   " << c_array[1] << endl;
    
    
                    /*for (int i = 0; i < 5; ++i) {
                        cout << "mein array Ausgabe: " << c_array[i] << endl;
                    }*/
    
    
                    /*
                    for (int i = 0; i < 5; i++) {
    
                        if(c_array[i] == 0){
    
                            cout << "Das array ist nicht voll: " << endl;
                        }
    
                    }
                        //Ausgabe der belegten felder
                    cout << "Es sind: " << c_array << " Felder belegt " << endl;*/
                }
                break;
                
            //Gibt alle belegten Felder aus.
            case 'o':
            case 'O':{
    
    
            }
            break;
    
            //Löscht das erste Element (Feld 0) und verschiebt alle Elemente um eine
            // Stelle nach vorn. Es wird eine Fehlermeldung ausgegeben, falls es nichts
            //zu löschen gibt.
            case 'd':
            case 'D':{
    
    
            }
            break;
    
            //Programm beenden
            case 'q':
            case 'Q':{
    
                break;
            }
            }
    
        }while(eingabe != 'q' || eingabe != 'Q');
    
        return 0;
        }
    
    


  • @adii950 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:

    eingabe != 'q' || eingabe != 'Q'

    Gehen wir mal mögliche Eingaben durch:

    Sei eingabe 'a' dann ist ('a' != 'q' || 'a' != 'Q') = (1 || 1) = 1 (wahr)
    Sei eingabe 'q' dann ist ('q' != 'q' || 'q' != 'Q') = (0 || 1) = 1 (wahr)
    Sei eingabe 'Q' dann ist ('Q' != 'q' || 'Q' != 'Q') = (1 || 0) = 1 (wahr)

    Der Ausdruck ist immer wahr - kein Programmende.



  • @adii950
    Nochmal:
    Warum benutzt Du keinen vector?
    Oder, falls Du tatsächlich irgendwann das erste Element entfernen und alle anderen aufrücken lassen willst, noch besser eine queue?



  • @Belli naja weil in der Aufgabe steht ich darf nur ein c-Array benutzten darf😅



  • @adii950 sagte in Die Position von einem C-Array um eins erhöhen ohne eine for-schleife zu benutzen:

    weil in der Aufgabe steht ich darf nur ein c-Array benutzten darf 😅

    Ich finde den lachenden Smiley unpassend. Diese hier wären besser passend: 😢 😭 😥 😰 😡 🤬



  • @DirkB ja stimmt hab es geändert danke dir



  • Hi, der Thread ist jetzt ja schon ein paar Tage alt. Aber: ist es wirklich so gedacht, immer nur ein Feld zu befüllen und nicht alle 5 Felder auf einmal? In deinem @adii950 Eingangspost steht ja immerhin "Bitte füllen Sie ihre Felder". Also, was genau steht in deiner Aufgabe?

    Seid C++17 können wir das Einlesen, auch bei einem C-Array ohne eigene For-Loop lösen:

    #include <iostream>
    #include <algorithm>
     
     int main() {
       int c_array[5] = { 0 };
    
       //lambda to read an int from cin
       auto read = []
       {
         int number;
         std::cin >> number;
         return number;
       };
    
       //fill array without manual for loop
       std::generate(std::begin(c_array), std::end(c_array), read);
    
       //just to show that it worked
       auto print = [](const int& n) { std::cout << " " << n; };
       // with another alternative for a typical for-loop
       std::for_each(std::begin(c_array), std::end(c_array), print);
     }
    

Anmelden zum Antworten