Array Inhalt Verschieben
-
Hi,
ich versuche gerade in meinem Projekt den Inhalt eines Arrays (Mehrdimenisonal) um mehrer Indexe zu verschieben.
Grund dafür ist, die Daten können evtl mehrfach vorhanden sein, weswegen ich sie aus meiner Liste lösche und anschliesend die die noch da sind eine fortlaufende Nummer zuweise.
Leider übernimmt er die Werte erst, sobald ich über den Index von 316 gehe was zur Folge hat wenn ich das Array lösche eine Fehlermeldung kommt mit folgendem Inhalt "DAMAGA: after normal block (#862)..."
Frage mache ich das überhaupt richtig?
// m_kennlinie = new double[316][3][3000]; UpdateData(true); // Nr, neu zuordnen CString sNr; for(int z=0; z < m_gesamtanzahl+1; z++) { // Nr Besorgen CString ausw = m_liste.GetItemText(z, 0); int sel = atoi(ausw); // Auf Array Index bringen sel -= 1; // Nr ändern sNr.Format("%d", z+1); m_liste.SetItemText(z, 0, sNr); int x = -1; // da zu beginn x++ = 0 sDebug.Format("%f", m_kennlinie[315][2][sel]); //AfxMessageBox(sDebug); do { x++; if(x > 315) break; for(int n = 0; n <= 2; n++) { // Daten kopieren m_kennlinie[x][n][z] = m_kennlinie[x][n][sel]; m_kennlinie[x][n][sel] = NULL; } } while( m_kennlinie[x][0][sel] != -1); }
-
Diese Schleifen sehen ja fürchterlich aus.
Warum eine do/while Schleife, Warum kein normaler for?Was ist bitte mit Gesamtanzahl+1?
Das wäre bei einem ab 0 laufenden Array falsch.Das Problem kann schon sein, dass z eine Zeile angibt, die nicht Existent ist.
Die Folge: sel=0, --sel... Array Index -1?
-
Danke für deine Antwort...Mittlerweile versuche ich es mir folgenden Code:
UpdateData(true); // Nr, neu zuordnen CString sNr; for(int z=0; z <= m_gesamtanzahl; z++) { // Nr aus Liste hollen (beginnt mit 1...) und auf Array Index bringen int sel = atoi(m_liste.GetItemText(z, 0)) - 1; if(sel < 0) break; // Nr ändern sNr.Format("%d", z+1); m_liste.SetItemText(z, 0, sNr); int x=0; for(x=0; m_kennlinie[x][0][sel] != -1; x++) { for(int n = 0; n < 3; n++) { // Daten kopieren m_kennlinie[x][n][z] = 0; m_kennlinie[x][n][z] = m_kennlinie[x][n][sel]; m_kennlinie[x][n][sel] = NULL; } } }
Ich habe aber den Eindruck, das die Werte garnicht verschoben werden...
-
Habe mir jetzt mal eine Ausgabe von den Indexe:
<14:55:48> m_kennlinie[0][0][0] = 0.287000 *** m_kennlinie[0][0][2] = 0.287000
<14:55:48> m_kennlinie[0][1][0] = 0.314300 *** m_kennlinie[0][1][2] = 0.314300
<14:55:48> m_kennlinie[0][2][0] = 0.564500 *** m_kennlinie[0][2][2] = 0.564500
<14:55:48> m_kennlinie[1][0][0] = 0.297700 *** m_kennlinie[1][0][2] = 0.297700
<14:55:48> m_kennlinie[1][1][0] = 0.312900 *** m_kennlinie[1][1][2] = 0.312900
<14:55:48> m_kennlinie[1][2][0] = 0.579600 *** m_kennlinie[1][2][2] = 0.579600
<14:55:48> m_kennlinie[2][0][0] = 0.308400 *** m_kennlinie[2][0][2] = 0.308400
<14:55:48> m_kennlinie[2][1][0] = 0.308400 *** m_kennlinie[2][1][2] = 0.308400
<14:55:48> m_kennlinie[2][2][0] = 0.590900 *** m_kennlinie[2][2][2] = 0.590900
<14:55:48> m_kennlinie[3][0][0] = 0.319200 *** m_kennlinie[3][0][2] = 0.319200
<14:55:48> m_kennlinie[3][1][0] = 0.301100 *** m_kennlinie[3][1][2] = 0.301100
.
.
.
<14:56:34> m_kennlinie[159][1][3] = 0.135700 *** m_kennlinie[159][1][9] = 0.135700
<14:56:34> m_kennlinie[159][2][3] = 0.610300 *** m_kennlinie[159][2][9] = 0.610300
<14:56:34> m_kennlinie[160][0][3] = 0.173200 *** m_kennlinie[160][0][9] = 0.173200
<14:56:34> m_kennlinie[160][1][3] = 0.120900 *** m_kennlinie[160][1][9] = 0.120900
<14:56:34> m_kennlinie[160][2][3] = 0.591300 *** m_kennlinie[160][2][9] = 0.591300
<14:56:35> m_kennlinie[161][0][3] = 0.179300 *** m_kennlinie[161][0][9] = 0.179300
<14:56:35> m_kennlinie[161][1][3] = 0.104300 *** m_kennlinie[161][1][9] = 0.104300
<14:56:35> m_kennlinie[161][2][3] = 0.565000 *** m_kennlinie[161][2][9] = 0.565000
<14:56:35> m_kennlinie[162][0][3] = 0.185300 *** m_kennlinie[162][0][9] = 0.185300
<14:56:35> m_kennlinie[162][1][3] = 0.086100 *** m_kennlinie[162][1][9] = 0.086100
<14:56:35> m_kennlinie[162][2][3] = 0.529900 *** m_kennlinie[162][2][9] = 0.529900
<14:56:35> m_kennlinie[163][0][3] = 0.191400 *** m_kennlinie[163][0][9] = 0.191400
<14:56:35> m_kennlinie[163][1][3] = 0.066400 *** m_kennlinie[163][1][9] = 0.066400
<14:56:35> m_kennlinie[163][2][3] = 0.484100 *** m_kennlinie[163][2][9] = 0.484100
<14:56:35> m_kennlinie[164][0][3] = 0.197400 *** m_kennlinie[164][0][9] = 0.197400
<14:56:35> m_kennlinie[164][1][3] = 0.045300 *** m_kennlinie[164][1][9] = 0.045300
<14:56:35> m_kennlinie[164][2][3] = 0.425600 *** m_kennlinie[164][2][9] = 0.425600
<14:56:35> m_kennlinie[165][0][3] = 0.203500 *** m_kennlinie[165][0][9] = 0.203500
<14:56:35> m_kennlinie[165][1][3] = 0.023100 *** m_kennlinie[165][1][9] = 0.023100
<14:56:35> m_kennlinie[165][2][3] = 0.351800 *** m_kennlinie[165][2][9] = 0.351800
<14:56:35> m_kennlinie[166][0][3] = 0.206500 *** m_kennlinie[166][0][9] = 0.206500
<14:56:35> m_kennlinie[166][1][3] = 0.011550 *** m_kennlinie[166][1][9] = 0.011550
<14:56:35> m_kennlinie[166][2][3] = 0.305850 *** m_kennlinie[166][2][9] = 0.305850
<14:56:35> m_kennlinie[167][0][3] = 0.209500 *** m_kennlinie[167][0][9] = 0.209500
<14:56:35> m_kennlinie[167][1][3] = 0.000000 *** m_kennlinie[167][1][9] = 0.000000
<14:56:35> m_kennlinie[167][2][3] = 0.259900 *** m_kennlinie[167][2][9] = 0.259900Aber leider hat dies keine Auswirkung...
So werden die Daten dann an ein anderes Dialog weitergegeben:
//Beim klick auf den "Zeichnen" Button werden die Werte und die Kennlinie der markierten //Auslegung übergeben void OnButtonZeichnen() { UpdateData(true); CString ausw=m_liste.GetItemText(m_liste.GetSelectionMark(),0); int sel=atoi(ausw); sel-=1; if(sel>=0) { double aktKennlinie[316][3]; double aktSchallwerte[50][2]; int i=-1; do { i++; for(int n=0;n<=2;n++) aktKennlinie[i][n]=m_kennlinie[i][n][sel]; } while(m_kennlinie[i][0][sel]!=-1); int aktWinkel[16]; i=-1; do { i++; aktWinkel[i]=m_winkel[i][sel]; } while(m_winkel[i][sel]!=-1); for(int n=0;n<=49;n++) for(int j=0;j<=1;j++) aktSchallwerte[n][j]=m_schallwerte[n][j][sel]; ... ... }
-
Sag mal kannst Du keine for Schleifen?
Warum immer do/while und dann eigentümliche Initialisierung der Laufzeitwerte?Du bekommst Doch einen Break im Debugger. Schau Dir den Callstack an. Wann das passiert!
-
, leider ist das nicht meine Umsetzung, ich versuche nur ein vorhandenes Projekt zu erweitern. Und du hast Recht, diese Art von Schleife ist sehr Mehrkwürdig....