Zeichenweise Lesen aus Datei



  • Hallo, ich habe Probleme Zeichen aus einer Datei in eine Integervariable zu
    kopieren:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void){
    
    FILE *datei; 
    datei = fopen("test.txt", "r");
    
    int a=0;
    
    while( a=fgetc(datei)!=EOF){
    
    printf("%d \n",a);    //hier bekomme ich nicht die gewünschte Ausgabe
    
    	                        }
    
    return EXIT_SUCCESS;
    }
    

    Ich weiß, dass man mittels

    while( (c=fgetc(stream)) !=EOF)
          putchar(c);
    

    das Problem beheben kann.
    Jedoch geht es bei mir nicht vorranging um die Ausgabe am Bildschirm.

    Ich mache die Ausgabe nur, um sicherzugehen, dass die Zeichen auch kopiert werden.
    Im Grunde möchte ich irgendwann die Zeichen direkt in ein Integer-Array kopieren.

    Aber dafür muss erst mal obiges Problem gelöst werden.
    Bin für jede Hilfe dankbar 🙂



  • %d erwartet einen int, dementsprechend wird der übergebene char als Zahlenwert ausgegeben (ASCII Code, nachzulesen hier).
    %c gibt chars korrekt aus.
    Nachzulesen z.B. hier
    Ein kleines Beispiel.



  • Danke für die schnelle Meldung, Vicious Falcon.

    Aber daran liegt es nicht.
    Ich habe schon bewusst den Integer gewählt.
    Ich bekomme komischerweise immer die gleiche Zahl ausgegeben.

    Nämlich immer ne "1".

    Obwohl meine Eingabedatei folgendes enthält:
    sdfs



  • Interessant wäre es vielleicht den Inhalt von test.txt zu kennen? 😉



  • habe ich doch erwähnt 🙂
    siehe oben.



  • Oh nein, ich habe mich wohl zu sehr auf das %d fixiert.
    Du musst den Inhalt der while Schleife richtig klammern:

    while((a=fgetc(datei))!=EOF)
    


  • Wahnsinn!! Vielen Dank. 🙂



  • server84 schrieb:

    while( a=fgetc(datei)!=EOF){
    

    muss heissen:

    while( (a=fgetc(datei))!=EOF){
    

    und %d gibt dann den ASCII-Wert des gelesenen char als Integer aus.
    fclose fehlt übrigens.



  • Wutz schrieb:

    fclose fehlt übrigens.

    Ich wollte das eben auch noch schreiben, habe es vergessen :p .
    Ausserdem, genau so wichtig, solltest du immer überprüfen, ob das Öffnen der Datei geklappt hat.

    if(datei)
    {
        /*..*/
        fclose(datei);
    }
    


  • Danke für den Hinweis.


Log in to reply