Sequenzielle Suche
-
1. Wirf einen Debugger an
2. step durch die Funktion und die Unterfunktion
3. Sobald etwas von dir unerwartetes geschieht guckst du dir an, warum (z.B. mal die Werte der Variablen an der Stelle angucken)
4. ???
5. Profit!
-
Dann nimm doch mal den Debugger.
Oderprintf("equalKDatum : %3d: %02d.%02d.%4d <-> %02d.%02d.%4d\n", k, kd1P->jahr, kd1P->monat, kd1P->tag , kd2P->jahr, kd2P->monat, kd2P->tag);
und
printf("seqSearchKDat: %3d: %02d.%02d.%4d <-> %02d.%02d.%4d\n", k, fdata[k].kdat.jahr, fdata[k].kdat.monat, fdata[k].kdat.tag , kdP->jahr, kdP->monat, kdP->tag);
Und schau nach ob es wirklich gleiche Daten sind.
-
Die Daten sind definitiv gleich, wie ich mit diesem Code überprüft habe:
for(k=n1-1; k<=n2-1; k++){ printf("%d", equalKDatum(&err[k].kdat, dat)); }
Hier erhalte ich als Ausgabe 0 und im Falle der Gleichheit eine 1.
Ich will aber die Indices also bei welchem k sich die gesuchten Fehlerdaten befinden, deshalb die Funktion seqSearchKDat, die mir k+1 ( +1 wg. Initialisierung von 0 beginnend). @seppj: 4. und 5. ?
-
Das ist aber trotzdem etwas anderes.
Du interpretierst/übergibst die Daten in seqSearchKDat anders als in equalKDatum
Genauer: beim ersten Paramter.An seqSearchKDat wird die Anfangsadresse von Feld übergeben. Dann stimmen auch die Indizes.
An equalKDatum übergibst du aber die Adresse von einem Element. Behandelst es aber wie die Anfangsadresse. Dann stimmen die Indizes nicht mehr.
Das Problem mit den zwei for-Schleifen.
-
Deshalb wohl auch dieses hier im Debugger:
&fdata[k].kdat 0x00076b50 {tag=-858993460 monat=-858993460 jahr=-858993460 }Wie biege ich das gerade?
-
Indem du seqSearchKDat mit dem gesamten Feld aufrufst oder in seqSearchKDat nur das übergebene Element vergleichst.
w=seqSearchKDat(&err[0], dat, n1, n2);
oder
if(equalKDatum(&(fdata->kdat), kdP))
Was du dadurch noch ändern solltest, musst du mal selber schauen.
-
Das verstehe ich nicht.
Hast du Stichworte für diese Thematik, dann informiere ich mich dadrüber lieber nochmal.
-
Arrays und Zeiger.
-
Bisschen genauer vllt?
-
Indizes fangen immer bei 0 an.
Eine Funktion kann nicht feststellen wie groß das Array ist.
Da ich dein Buch nicht kenne, kann ich dir leider nicht die Seite nennen.