Wertzuweisung (array)



  • Guten Tag Ihrs 😉

    Ich wollte mal so nebenbei sowas wie ein sortier-progi machen.
    Aber wenn ich die werte, per 'hilfsvar', neu zuweise, sind alle werte 0.

    int rpw[2];
    
        cout<<"Eingabe\t";
        cout<<"1: "; cin>>rpw[0];
        cout<<"2: "; cin>>rpw[1];
        int y=1, x=0, var=0;
    
        if(rpw[x] > rpw[y])
        {
              rpw[x] = var;
              rpw[y] = rpw[x];
              var = rpw[y];
        }
    
        cout<<rpw[0]<<endl;
        cout<<rpw[1]<<endl;
    

    Habe gestern Abend schon gegrübelt was ich falsch mache..
    (is halt nur profisorisch aufgebaut)

    würde mich über tipps oder so freuen.
    Bis dense!

    lg

    |Edit:
    Der fehler liegt ja wohl hier:

    rpw[x] = var;
    rpw[y] = rpw[x];
    var = rpw[y];
    

    aber ich komm ned drauf.. °shame°



  • Schau dir doch mal die Reihenfolge der Ausdrücke an 😉
    Das Programm rechnet von oben nach unten und bei Zuweisungen ist vor dem Gleichheitszeichen das Ziel - dadurch setzt du erst rpw[0] auf 0 (der Wert steht vor der if-Abfrage in 'var') und überträgst diesen Wert dann auf alle beteiligten Variablen.

    Für einen richtigen Dreieckstausch mußt du die Anweisungen in umgekehrter Reihenfolge (oder rückwärts) schreiben:

    var = rpw[x];
    rpw[x] = rpw[y];
    rpw[y] = var;
    


  • aaach du schande 😃 oh göttchen, hab das völlig vergessen..
    Danke viel mal 😉
    lg



  • so, hab nun alles so wie's sein sollte..
    nur wenn man bei der Frage ob man das ganze nochmals machen will, nicht j/J eingibt, muss man noch ein 2.mal Enter drücken..
    evt. weiss einer noch ne lösung.
    ps: bin anfänger 😉

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
        char nochma;
        int w, wie;
        do
        {
            cout<<"Wieviele Zahlen wollen Sie eingeben/sortieren?\t";
            cin>>w;
            int rpw[w];
    
            for(int n=1; n<=w; n++)
            {
                    cout<<n<<": ";
                    cin>>rpw[n-1];
            }
            cout<<"\nWie wollen Sie sortieren? ('0' fuer Aufwaerts, '1' fuer Abwaerts)\t";
            cin>>wie;
            for(int y=0; y<w-1; y++)
            {
                for(int x=y+1; x<w; x++)
                {
                    if(rpw[y]>rpw[x] && wie == 0)
                    {
                        int var=0;
    
                        var = rpw[y];
                        rpw[y] = rpw[x];
                        rpw[x] = var;
                    }
                    if(rpw[y]<rpw[x] && wie == 1)
                    {
                        int var=0;
    
                        var = rpw[y];
                        rpw[y] = rpw[x];
                        rpw[x] = var;
                    }
                }
            }
    
            cout<<"\nsortiert:\n";
            for(int n=0;n<w;n++)
            {
                cout<<rpw[n]<<endl;
                Sleep(125);
            }
            cout<<"\nWollen Sie das Ganze wiederholen? (j/n)";
            cin>>nochma;
        }while(nochma == 'j' || nochma == 'J');
    
        fflush(stdin);
        getchar();
    
        return 0;
    }
    

    windows.h ist eigentlich unnötig 🙂

    lg



  • Erstens: Variable Length Arrays ( int rpw[w]; ) sind kein legales C++ Sprachmittel. (die gibt es nur im C99 Standard - in C++ muß die Größe eines Arrays zur Compilezeit feststehen)

    Zweitens: fflush(stdin); ist zwar nicht direkt verboten, bewirkt allerdings undefiniertes Verhalten (und nur ausgewählte Compiler machen das, was du erwarten würdest, mit dieser Anweisung). Der korrekte Weg geht über cin.ignore().

    Drittens: Du mußt einmal Enter eingeben, um die Eingabe von j zu bestätigen und ein zweites Mal für das getchar(). (btw ist es keine gute Idee, C und C++ Eingabemethoden zu mischen)



  • erstmal vielen Dank für die Antwort 🙂

    also sollte ich zB. rpw[255] machen? Dann kommt bei mir die Frage wie ich dann den User bestimmen lassen kann wieviele Zahlen verglichen werden sollen.

    wegen fflush(stdin), so haben wir es, bis jetzt, gelernt, werde mich mal über das cin.ignore() informieren..

    ..und wenn ich getchar() weglasse funktunierts gar nicht mehr.. 🙂

    benutze Dev C++ 4.9.9.2.. und windows(xp)

    irgendwie bin ich stolz auf mich das ich sowas "allein" gepackd hab, anderer seits nervts mich nun grausam, das wir es nicht ganz korrekt lernen..oder so.
    grmL

    lg



  • PsySmo schrieb:

    also sollte ich zB. rpw[255] machen? Dann kommt bei mir die Frage wie ich dann den User bestimmen lassen kann wieviele Zahlen verglichen werden sollen.

    nimm einen std::vector - der kann sogar zur Laufzeit noch mitwachsen, wenn der User sich verzählt hat 😉

    wegen fflush(stdin), so haben wir es, bis jetzt, gelernt, werde mich mal über das cin.ignore() informieren..

    Tu das.

    ..und wenn ich getchar() weglasse funktunierts gar nicht mehr.. 🙂

    Was genau bedeutet "funktioniert nicht" für dich? An der Stelle ist das getchar() nur dazu gut, daß das Konsolenfenster sich nicht sofort verabschiedet - aber da nach der letzten Benutzereingabe sowieso keine Daten mehr kommen, stört das (imho) nicht besonders.



  • hui °lern° 😉

    Also das mit getchar() weglassen funktioniert, dh. den vorherigen Post was das angeht, nicht beachten.. sorry..
    wenigstens gibts jetzt wieder was zu lernen.

    Vielen Dank!


Anmelden zum Antworten