Wie zeige ich einen Text in der konsole an



  • das programm ist wunderbar, aber nur, wenn die datei Highscore.txt den highscore auch im binärformat enthält. die endung .txt lässt mich aber vermuten, daß die daten als text vorliegen. und dann klappt fread() natürlich nicht. du mußt die daten dann mit fscanf() einlesen:

    for(int i=0; i<10; i++)
      fscanf(quelle,"%d",&puffer[i]);
    


  • Seh ich dann den Text?



  • Stefan311 schrieb:

    Seh ich dann den Text?

    ich verstehe jetzt nicht ganz was du meinst.

    wenn du die datei Highscore.txt mit einem texteditor öffnest und du die zahlen dann einwandfrei lesen kannst, dann hat die datei textformat und mein codebeispiel sollte dein problem lösen. aber nur, wenn die zahlen durch leerzeichen oder zeilenende getrennt sind. anderenfalls müßte man die daten beim einlesen erst entsprechend parsen. du solltest dann den inhalt der Highscore.txt-datei hier posten, damit ich dir da helfen kann.

    wenn beim öffnen mit einem texteditor nur zeichenmüll auf dem bildschirm erscheint, dann hat die datei wohl binärformat. dann hinge es davon ab, was für ein format genau. in diesem falle solltest du mir das, was der editor anzeigt, mit cut-and-paste auch hier posten. zusammen mit der größe der Highscore.txt-datei!



  • wenn du die datei Highscore.txt mit einem texteditor öffnest und du die zahlen dann einwandfrei lesen kannst

    Also darin sind eigentlich buchstaben.

    Hier der inhalt (ist noch test):
    Hallo

    Achso ich brauche dieses nähmlich für ein program was punkte zählt.
    Es erstell und schreibt dort die ergebnisse rein aber als normale buchstaben.



  • na, wenn da keine punktzahlen sondern nur "hallo" drinne steht, dann ists ja kein wunder, daß dein peogramm nur unsinn ausgibt!

    dann mußt du in die datei halt erst ein paar punktzahlen eingeben. etwa so:

    4577
    784
    100
    250
    55
    1128
    1024
    4096
    3141
    911
    

    dann ists text-format. wenn du dann deinen code auch noch so änderst, wie ich es dir bereits geschrieben habe, dann sollte es funktionieren.

    außerdem solltest du dann beim fopen()-aufruf "r" anstelle von "r+b" nehmen.



  • Ich habe jetzt etwas gefunden. Fgets.Jetzt hab ich nur noch ein problem.wie sag ich im wieviele zeilen er auslesen soll?



  • for(i=0;i<ANZAHL_DER_AUSZULESENDEN_ZEILEN;i++)
     fgets(....);
     .....
    


  • kannst du nicht.
    fgets in ner schleife.

    wenn du die zeilen auch noch im speicher halten willst, dann mit malloc speicher holen und mit realloc das array mit den char*s drin erweitern.

    int i, listenlen = 10, neuelistenlen, stringlen = 50;
    char **liste = malloc(listenlen * sizeof(char*));
    for(i = 0; i < listenlen; ++i) liste[i] = malloc(stringlen * sizeof(char));
    
    /* erweitern... */
    neuelistenlen = 20;
    liste = realloc(liste, neuelistenlen * sizeof(char*)); /* vorher warens weniger */
    for(i = listenlen; i < neuelistenlen; ++i) liste[i] = malloc(stringlen * sizeof(char));
    listenlen = neuelistenlen;
    
    /* kürzen */
    neuelistenlen = 5;
    for(i = neuelistenlen; i < listenlen; ++i) free(liste[i]);
    liste = realloc(liste, neuelistenlen * sizeof(char*));
    listenlen = neuelistenlen;
    
    for(i = 0; i < listenlen; ++i) free(liste[i]);
    free(liste);
    

    die casts machst du selber rein, dazu war ich grad zu faul.

    http://www.cppreference.com/stdmem/realloc.html



  • danke



  • Jetzt gibt er immer nur die letzte zeile aus.
    eigentlich dachte ich daran denn ganzen Text auszugeben.



  • while (!feof(filehandle)) {
    fgets(... was auch immer...);
    printf(... was auch immer...);
    }
    

    alle angaben ohne gewähr,
    fehlerbehandlung nicht im lieferumfang inbegriffen



  • Es klappt danke.Endlich kann ich das Programm ganz fertig machen.


Anmelden zum Antworten