c++newb frage .bin files



  • Also, ich hätte folgende Aufgabenstellung, die ich einfach nicht hinbekomme...

    Ich will versch. Messwerte in ein .bin file schreiben.
    Zuerst gebe ich an wie das file lautet, dann wieviele Messwerte ich eingeben will... nun sollte es jeden eingegebenen Messwert ins, sagen wir mal test.bin file schreiben...
    außerdem sollte ich dann mittels fseek einen bestimmten Messwert auslesen können!
    code zum schreiben:

    Datei1 = fopen(path,"w+b");

    printf("Anzahl der Zahlen: ");
    cin >> anzahl;
    printf("%d Zahlen eingeben:\n",anzahl);

    for(i=1;i<=anzahl;i++)
    {

    cin >> zahl;

    fwrite(&zahl,sizeof(float),1,Datei1);
    }
    fclose(Datei1);
    -------------------------------------------------------------
    code zum lesen:

    Datei1 = fopen(path,"r+b");

    printf("\nPosition eingeben: ");
    cin >> pos;
    fseek(Datei1,pos*sizeof(float),0);
    fread(&ausg,sizeof(float),1,Datei1);
    printf("Messwert%d: %f",pos,ausg);

    getch();

    vielleicht kann mir ja jemand helfen... ich denke, dass schon beim schreiben ins file ein fehler ist, da im test.bin file nach ein paar eingaben z.b. so etwas steht: @@ @ €?

    Danke für jeden Antwort!!!

    LG Axor



  • wenn du .bin als Bezeichnung für ein Binarfile nimmst, scheint mir der Inhalt der datei prinzipiell nicht falsch.

    Habe gerade das Programm getestet es funktioniert, einziger fehler bei der Ausgabe fängst du an der falschen Stelle an.
    Die erste eingegeben Zahl ist im File an position 0

    fseek(Datei1,(pos-1)*sizeof(float),0);
    

    wäre hier sinnvoller.

    Das die Daten im File für dich nicht lesbar sind ist ok.
    In einem Binaerfile sind die Daten in ihrer internen Darstellung (bei float sind das 4 Bytes ) gespeichert, und nicht
    in im HRM Format (HRM = Human Readable Format im Gegensatz zu MRM = Maschine Readable Format).

    Aber das hättest du leicht selber austesten können. In dem du die Datei öffnest und dir alle Elemente mit printf ausdrucken läst.

    Außerdem solltest du dich entscheiden ob du C oder C++ Programme schreibst.
    Entweder konsequent cin und cout oder konsequent scanf und printf.

    Die Beiden Methoden so wild zu mischen ist nicht sinnvoll,(obwohl es für mich immer wieder sinnvoll ist, auch in C++ Code die sprintf und sscanf Funktionen zu nutzen, da sie teilweise besser lesbar sind).


Anmelden zum Antworten