Binär lesen und schreiben



  • DirkB schrieb:

    Was für eine 1 soll das sein? '1' oder 1 ?
    Binärdaten und Zeilenvorschub wiedersprechen sich etwas, da In der Binärcodierung einer Zahl auch der Zeilenvorschub enthalten sein kann.

    Also als Beispiel wenn der Benutzer 125 eingibt, sollte in der Binären Datei "1111101 0" stehen. (Mit Zeilenumbruch)
    In der Konsole sollte dann "125 Keine Primzahl" (Auch mit Zeilenumbruch)

    DirkB schrieb:

    Binär schreiben geht mit fwrite. Die '1' und das '\n' bekommst du mit fprintf oder fputc in die Datei.

    Ich bin leider nicht ein C-Genie...
    Könntest du mir bitte einen simpeln Beispiel Code schrieben, dass ich das in meinen Code umsetzen könnte?
    Ich habe noch nie mit fputc gearbeitet und wenn ich fwrite benütze sagt mein Compiler "Too few arguments" 😮

    Danke an allen für die schnellen Antworten!
    Lg Rogon



  • Hier nochmal den Code ohne die Kommentare (für besseres Verständniss):

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    
    int main()
    {
    char string[200] = "";
    FILE* datei;
    
    if( (datei = fopen("file.bin", "ab+")) == NULL)
    {
    printf( "Fehler: Datei existiert nicht");
    getch();
    return 0;
    }
    
    else
    {
    printf("Die Datei existiert");
    }
    
    scanf(datei, "%s", &string);
    fprintf(datei,"Schreibe etwas in die Datei: ");
    fwrite(datei,"%s", string); //Hier gibts noch ein Fehler im Compiler
    
    printf(datei,"%s", string);
    fclose(datei);
    
    return 0;
    }
    


  • Rogon schrieb:

    fwrite(datei,"%s", string); //Hier gibts noch ein Fehler im Compiler
    

    http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/



  • Ah, ok.

    Du möchtest die Zahl im Dualsystem ausgeben.

    Wenn du die Datei ansiehst, sollen dort '0' und '1' zu sehen sein.

    Unter binäre Speicherung versteht man das Format, wie die Zahlen im Rechner abgelegt sind.

    Eine Funktion die Werte zur Basis 2 asugibt gibt es im Standard-C nicht.
    Die musst du dir selber schreiben.

    Dazu brauchst du auch kein fwrite.
    Bei deiner Fehlermeldung hast du fwrite verkehrt aufgerufen.
    Du kannst dir die C-Funktionen z.B: bei www.cplusplus.com/reference/clibrary/ ansehen. Dort gibt es auch einige Beispiele.

    Und wenn du dir auch andere Beiträge im (Unter-)Forum durchliest, findest du auch http://www.c-plusplus.net/forum/305432 von gestern abend.
    Der hat fast dein Problem, nur mit Hex-Zahlen. Schau dir mal die Links dort an.

    Tipp: Dual ist Basis 2, Dezimal ist Basis 10 und Hexadezimal ist Basis 16.



  • Jetzt habe ich deinen neuen Code glatt übersehen.
    Zeile 23, 25 und 27 sind immer noch falsch.

    Bei deinen Fehlern gibt der Compiler auch Warnungen, wenn nicht sogar Fehlermeldungen. Auch die Warnungen sind wichtig.



  • WOAAAAAAAH! 😮
    Es funtioniert fast!

    Hier mein aktueller Code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    
    int main()
    {
    
    char string[200] = "";
    
    FILE* datei;
    
    if( (datei = fopen("file.bin", "ab+")) == NULL)
    {
    printf( "Fehler: Datei existiert nicht");
    getch();
    return 0;
    }
    
    else
    {
    printf("Die Datei existiert");
    }
    
    scanf(datei, "%s", &string);
    
    printf("\nSchreibe etwas in die Datei: ");
    scanf("%s", string);
    fputs(string, datei);
    fclose(datei);
    
    return 0;
    }
    

    Jetzt kann ich einschreiben!
    Und das funktioniert gut!

    Es ist einfach das Problem, das es nicht Binär ist 😕
    Wie kann ich die Daten Binär einschreiben?

    Lg Rogon



  • Rogon schrieb:

    Wie kann ich die Daten Binär einschreiben?

    Dazu musst Du mit fwrite schreiben.



  • Rogon schrieb:

    Es ist einfach das Problem, das es nicht Binär ist 😕
    Wie kann ich die Daten Binär einschreiben?

    Lg Rogon

    Was erwartest du, du schreibst genau das in die Datein rein, das du auch eintippst. Wenn du 1111101 eingibst, steht das dann auch in der Datei.

    Aber egal, was du da eingibst, ist das erstmal eine Zeichenkette und noch keine Zahl mit der dur rechnen kannst.

    Rogon schrieb:

    Wie kann ich die Daten Binär einschreiben?

    DirkB schrieb:

    Eine Funktion die Werte zur Basis 2 ausgibt, gibt es im Standard-C nicht.
    Die musst du dir selber schreiben.

    Ich habe dir auch einen Link auf ein ähnliches Thema hier im Forum gepostet.

    @Belli:
    Er will die nicht binär haben.
    Er will eine binäre Darstellung.
    Im Prinzip ein %b für printf(), damit dann z.B. "1111101" rauskommt



  • DirkB schrieb:

    @Belli:
    Er will die nicht binär haben.
    ...

    ICH weiß das. Ich glaube, Du hast schon zwei, drei Postings vorher versucht, IHM das auch klarzumachen. Aber er fragt immer danach und ich bin kein Kindergärtner.



  • Ok, entschuldige.

    Aber wenn er da nochmal fwrite reinschreibt, kann ihm auch keine Kindergärtner mehr helfen.

    Ein Buch (für Rogon) und viel Geduld (von Rogon) mögen Wunder wirken (bei Rogon).



  • Also, ich habe jetzt fputs und es funtioniert alles!

    Weiss jemand aber wie man Binär in C umsetzt?

    Also es ist ja zahl/2 bis es 0 ist!
    Aber wie setzt man das in C um?

    Ich habe foldendes versucht:

    int zahl = 125;
    
    while(zahl/2 != 0){
    		if(zahl%2 > 0)
    		{
    		    printf("0");
    		}
    		else
    		{
    		    printf("1");
    		}
            zahl = zahl/2 - ((zahl/2)%2);
        }
    printf("0");
    }
    

    Was mache ich falsch?

    Lg Rogon 😃



  • Rogon schrieb:

    Was mache ich falsch?

    Lg Rogon 😃

    Du gibst die falsche Fehlerbeschreibung: http://www.c-plusplus.net/forum/136013

    Was passiert und was erwartest du?

    Was kann man in dem Programm falsch machen?
    - Abbruchbedingung
    - berechnung des neuen Wertes
    - falsche Reiehenfolge
    - falsche Vorstellung was passiert.

    Ich denke 4 von 4 hast du.



  • Es geht!!

    Hier mein Code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    
    int main()
    {
    
    fopen("datei", "ab+");
    
    char eingabe [10];
    
    FILE* datei;
    
    if( (datei = fopen("file.giomizer", "ab+")) == NULL)
    {
    printf( "Fehler: Datei existiert nicht");
    getchar();
    return 0;
    }
    
    else
    {
    printf("Datei bereit!\n");
    }
    
    printf("Geben Sie eine Zahl zwischen 0 und 255 ein\n");
    scanf("%s", eingabe);
    
    fputs(eingabe, datei);
    fputs(" ", datei);
    
    int number;
    
        int rest;
        int y;
    
        for(y = 0; y >= 0; y--) {
        while(y < 7)
        {
            rest = number/(1 << y);
    
            number = number - rest * (1 << y);
            y++;
                fputs(rest, datei);
        }
    
        fputs(" ", datei);
    
    int test = eingabe;
    
        if
            (test == 0) {
                fputs("0", datei);
            }
    
            else if  (test == 2) {
                fputs("1", datei);
            }
    
            else if  (test == 1) {
                fputs("0", datei);
            }
    
            else if  (test%2 == 0) { //Modulo
                fputs("0", datei);
            }
    
            else if  (test%3 == 0) {
                fputs("0", datei);
            }
    
            else if  (test%4 == 0) {
                fputs("0", datei);
            }
    
            else if  (test%5 == 0) {
                fputs("0", datei);
            }
    
            else if  (test == 3) {
                fputs("1", datei);
            }
    
            else if  (test == 5) {
                fputs("1", datei);
            }
    
            else if  (test == 7) {
                fputs("1", datei);
            }
    
        else{
        fputs("1", datei);
        }
    
        fputs("\n", datei);
    
        fclose(datei); //wichtig: FILE* muss wieder geschlossen werden
    return 0;
    }}
    

    Danke an allen für eure Hilfe!
    Ihr seit super!

    Lg Rogon



  • Rogon schrieb:

    Ihr seit super!

    www.seitseid.de

    Abgesehen davon ist der Code auf unterirdischem Niveau und Du solltest dringend mit einem der empfohlenen Bücher oder Tutorials nochmal bei den absoluten Grundlagen beginnen...


  • Mod

    Wie dir in einem anderen Thread schon gesagt wurde, ist deine Lösung voller Fehler. Dass sie funktioniert ist reinstes Glück (oder Pech, denn so merkst du den Fehler erst durch Vorführeffekt). Zeile 48 ist feinstes undefiniertes Verhalten, Zeile 53 macht nicht einmal entfernt das was du denkst. Ehrlich gesagt kann ich gar nicht nachvollziehen, wie dies auch nur in irgendeinem Fall funktionieren soll, nicht einmal der Möchtegerndebugmodus einer bekannten IDE (der meiner Meinung nach eher Fehler versteckt als aufdeckt) wird dieses Programm zum Funktionieren bringen.

    Außerdem ist die ganze Grundidee des Algorithmus Müll.



  • Rogon schrieb:

    Es geht!!

    Hier mein Code:

    [...]

    Na siehst Du. Ein bisschen Mühe und Biss, dann klappt das schon. War doch gar nicht so schwer, oder?


Anmelden zum Antworten