Wie zeige ich einen Text in der konsole an



  • also ich weiß ja wie ich eine datei öffne aber wie gebe ich sie dann in der konsole aus.



  • lesen und printf()?



  • Es gibt viele verschiedene funktionen zum lesen aus dateien.

    Meine Lieblingsfunktion ist zum Beispiel fread(). Dazu musst du
    die Datei allerdings im Binaermodus geoeffnet haben.

    Hier findest du bestimmt etwas gutes zu diesem Thema:
    www.pronix.de

    mfg LastManStanding



  • ich hab schon wieder 😞 das problem mit anhalten unter windows.es läuft durch und weg ist das prog.ohne das ich was sehe.



  • konsole aufmachen und da drin das programm ausführen.
    guck in die konsolenFAQ



  • Ich habs problem gelöst.So fread funktuniert aber er sagt (ich kenn micht mit der fread,fwrite noch nicht so aus.)Wert1=irgendwelche zahlen.
    wert2=""
    usw.
    wie ändere ich das nun?Also ich meine die zahlen ändern sich nie auch wenn ich in der ausgelesenen Datei was ändert.(nebenbei dachte ich an eine buchstaben ausgabe wie geht das?



  • So die ändern sich jetzt hab ichs hab was vergessen im quellcode einzu fügen.
    aber wie stelle ich das jetzt buchstäblich da?



  • Lieber Stefan, so wird das nix 🤡 ... poste mal den quellcode und dann schau ma
    weiter!



  • Hier ist noch das beispiel programm von der seite die mir gesagt wurde nur ein bisschen verändert zum testen.Denn ich will es gerne ins andere programm intigrieren.Aber dazu muss ich erstmal wissen wie ich es damit richtig ausgebe.

    /* fread.c */
    #include <stdio.h>
    #include <stdlib.h>
    #include <dos.h>
    
    int main(void) {
       int puffer[10];
       FILE *quelle;
       int i;
    
       quelle = fopen("Higscore.txt", "r+b");
       if(quelle != NULL)
          fread(&puffer, sizeof(int), 10, quelle);
    
       for(i = 0; i < 10; i++)
          printf("Wert %d = %d\n", i, puffer[i]);
          getch();
     return EXIT_SUCCESS;
    }
    


  • 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


Log in to reply