Wie kopiert man float in strukturen???



  • Also ich programmiere seit ca 2 bis 3 monaten.
    Aber ich gebe zu ich habe mich mit einer kompletten Firmenverwaltung
    die mit Masken arbeitet und eine endlosschleife für eine permanente Tastaturabfrage hat, etwas überfordert.
    Aber ich will das fertig bekommen und nicht mittendrin aufhören.
    Und in wie fern ist mein code horror????Du kennst ja nur das bisschen was ich gepostet habe!!!
    Habe nun versucht:
    artikel[x].rabatsta1 = artikel[x+1].rabatsta1;(klappt auch nicht)
    schaue mir jetzt erstmal das mit dem memset an.Vieleicht bringts mich ja weiter.

    Danke trotzdem
    XcrAckX



  • Die sollen doch um eins hoch kopiert werden,
    also eher

    artikel[x].rabatsta1 = artikel[x-1].rabatsta1;
    

    Dabei muss die Schleife allerdings rückwärts laufen
    also

    for (x = Anz_A-1; x >= nra; --x)
    

    sonst kopierst du den 1. Wert einfach nur bis nach oben durch.



  • Nein sie sollen um eins runter kopiert werden also, array[0] bekommt den inhalt von array[1] und array[1] den inhalt von array[2] und array[2] den inhalt von array[3]. array 3 wird gelöscht.

    Ich habe das selbe prinzip schon für Kundenadressen. Da funktioniert das wunderbar weil alles nur chararrays sind. Hier kommen aber auch int und float arrays dazwischen und da funzt es halt mit strcpy nicht weil strcpy ja zum kopieren von strings gedacht ist.



  • Sorry memset war falsch, wollte memcpy schreiben. memset ist zum löschen...
    Das Tastenturabfrage würde ich dir einen Separaten Thread empfehlen, wenn du nicht schon einen Hast...
    Horror ist gemaint, weil du jeder einzelne Member einer Struktur kopierst, anstat mit

    memcpy(&artikel[1],&artikel[0],sizeof(Artikeldaten));
    

    alles auf einmal zu kopieren...



  • jo super, ich danke dir vielmals. Das ist auch eine viel bessere und einfachere
    art und weise als meine.
    Naja ich lerne jeden tag dazu 😉
    Besten Dank nochmal, klappt wunderbar!!!



  • Schreib doch

    typedef struct
    {
    ...
    ...
    }TagArtikel;
    TagArtikel tagArtikel[100];
    

    Dann kannst du TagArtickel as grösse nehmen... So mache ich das normalerweise.

    Gruss Binggi



  • Strukturelemente zu kopieren, nur um ein Element zu löschen, ist viel zu rechenintensiv, also ineffizient.
    Man macht es häufig so, dass man einem Strukturelement einen bestimmten Wert zuweist, der sonst nicht in den Nutzdaten vorkommen kann und damit die Struktur als gelöscht markiert.
    Hier wäre eventuell die Verwaltung der Artikeldaten in einer verketteten Liste oder einem Array vom Typ struct Artikeldaten** von Vorteil.



  • XcrAckX schrieb:

    Nein sie sollen um eins runter kopiert werden also, array[0] bekommt den inhalt von array[1] und array[1] den inhalt von array[2] und array[2] den inhalt von array[3]. array 3 wird gelöscht.

    Ich habe das selbe prinzip schon für Kundenadressen. Da funktioniert das wunderbar weil alles nur chararrays sind. Hier kommen aber auch int und float arrays dazwischen und da funzt es halt mit strcpy nicht weil strcpy ja zum kopieren von strings gedacht ist.

    Trotzdem sprengst du mit dem Index x+1 die Arraygrenze, wenn Anz_A die Anzahl der Strukturen ist.



  • memcpy(&artikel[1],&artikel[0],sizeof(Artikeldaten));
    

    Das wird so nichts.
    Eher

    memmove(artikel,&artikel[1],99*sizeof(*artikel));
    

    Für solche Sachen gibt es memmove, memcpy führt sehr wahrscheinlich zu Fehlern!



  • Binggi schrieb:

    Sorry memset war falsch, wollte memcpy schreiben. memset ist zum löschen...
    Das Tastenturabfrage würde ich dir einen Separaten Thread empfehlen, wenn du nicht schon einen Hast...
    Horror ist gemaint, weil du jeder einzelne Member einer Struktur kopierst, anstat mit

    memcpy(&artikel[1],&artikel[0],sizeof(Artikeldaten));
    

    alles auf einmal zu kopieren...

    und funktioniert hats nicht weil die cpy funktionen einen pointer erwarten, also müsste den variablen & vorangestellt werden. wie hieß das, Variablen refferenzieren oder derefferenzieren?


Anmelden zum Antworten