Anzeige:
Ergebnis 1 bis 2 von 2

Thema: fgetc, array & putchar, wo ist der haken?

  1. #1
    Registrierter Benutzer
    Registriert seit
    01.04.2008
    Beiträge
    18

    fgetc, array & putchar, wo ist der haken?

    hab hier bisschen code fabriziert:

    #include <stdio.h>
    #include <stdlib.h>

    int main() {
    FILE *stream;
    char *datei = "bla.txt";
    int ch[1001];
    if((stream = fopen(datei, "r")) == NULL) {
    printf("could not open %s\n", datei);
    exit(1);
    }
    while(!feof(stream)) {
    for(i=0; i != 1000; i++) {
    ch[i] = fgetc(stream);
    }
    }
    fclose(stream);
    for(i = 0; i != 1000; i++) {
    putchar(ch[i]);
    }
    exit(0);
    }
    damit sollen aus einer datei einfach eine zahlenkette gelesen werden und in ein array (ch) geschrieben werden.
    das problem ist, dass ich zwar sozusagen die richtige anzahl an zeichen bekomm (auch wenn ich mir zB ch[0] anzeigen lasse), allerdings sind es nicht die zahlen, sondern sowas:
    �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������������� �������������������������������������������� �����
    wenn ich das putchar(ch[i]) direkt nach dem ch[i] = fgetc (...) aufrufe, dann klappt es, allerdings wird ganz am ende des zahlenstrangs auch ein solches zeichen � angezeigt.
    mir scheint es komisch, denn die zahlen sollten ja so oder so im array gespeichert werden, unabhängig davon, in welcher schleife ich es ausgeben lasse... gdb sagt mir nix, außer dass alles glatt läuft.

    sicher wieder nen trivialer fehler, allerdings komm ich (mal wieder) nich drauf

    hoff ich nerv nich zu arg, hab sozusagen änfängerprobleme

  2. #2
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von xzm Beitrag anzeigen
    Code:
    while(!feof(stream)) {
    	for(i=0; i != 1000; i++) {
    		ch[i] = fgetc(stream);
    		}
    	}
    Hier verschachtelst du zwei Schleifen, d.h. die for-Schleife wird mehrfach ausgeführt, falls du Datei nach 1000 Byte nicht zu Ende ist.

    Also darfst du nur eine Schleife nutzen.
    Übrigens: feof() gibt erst dann true zurück, wenn das Lesen bereits einmal fehlgeschlagen ist.

    Um also maximal 1000 Byte zu lesen:
    Code:
    for(i=0; i != 1000; i++) {
    	ch[i] = fgetc(stream);
    
    	if (ch[i] == EOF) { /* das geht nur, weil ch int und nicht char ist */
    		break;
    		}
    	}
    ch[i] = 0;

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •