Pointer - Probleme, fscanf(CSVdatei, ....)
-
Guten Tag zusammen,
Ziel meiner Bemühungen ist es aus einer CSV-Datei (s. unten) den nummerischen Inhalt in ein Array zu speichern und als eine Zeile auszugben. Die Compilierung funktioniert, keine Warnings, jedoch wird der Inhalt der Datei nicht auf dem Bildschirm ausgegeben.
Hier ist die CSV Tabelle (table.txt). Werte sind durch "," getrennt. "CR" und "Linefeed" sollen am Zeilende einfach ignoriert werden.
1,2,3,4,5 -6,-7,-8,-9,-10 12,123,1234,12345
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int *daten; int i; daten = (int *)calloc(100, sizeof(int)); FILE* input = fopen("table.txt","rt"); for(i=0;i<100;i++) { fscanf(input,"%d",daten[i]); fprintf(stdout," %d",daten[i]); } fclose(input); system("PAUSE"); return 0; }
Kann mir von Euch einer sagen wo mein mein Denkfehler ist?
Grüße, Euer Kevin
-
Das Komma dient zwar als Kennzeichnung, daß die Zahl an der Stelle zu Ende ist, wird aber nicht mehr mitgelesen. Das heißt, am Ende der ersten Durchlaufs steht der Lesezeiger deiner Datei auf dem ersten Komma - und das wird in allen weiteren Schleifendurchgängen als ungültiges Zeichen eingestuft.
Die Lösung dazu ist ganz einfach - du mußt die Kommas von Hand überlesen (entweder per fgetc() oder im scanf-Aufruf per 'fscanf(input,"%d**,**",daten[i]);').
-
Vielen Dank für die schnelle Antwort. Leider funktioniert das nicht...
fscanf(input,"%d,",daten[i]);
führt praktisch zum gleichen Fehler. Ich hab versucht das zu debuggen, jedoch ohne Erfolg.
-
Dann bleibt doch noch fgetc() übrig.
-
Da fehlt auch ein &
-
oder so
fscanf (input,"%d,",daten+i);
-
Guten Tag,
vielen Dank für Eure Antworten. Leider funktioniert das nicht. Ich hab den Code nochmal geändert gem. einigen Vorschlägen. Auf der Konsole kommt nun aber nur irgend was raus...
Vielen Dank für Eure Hilfe!
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char *daten; int i; daten = (char *)calloc(100, sizeof(char)); FILE* input = fopen("table.txt","rt"); for(i=0;i<10;i++) { fscanf (input,"%d,", (int*)(daten+i) ); fprintf(stdout," %d",(int*)(daten+i) ); } fclose(input); system("PAUSE"); return 0; }
-
'fscanf' braucht'n pointer.
für 'fprintf' musste dereferenzieren..fscanf (input,"%d,", daten+i); fprintf(stdout,"%d", daten[i]);
-
für scanf() übergibst du die Adresse der Variablen, für printf() übergibst du ihren Wert:
for(i=0;i<10;i++) { fscanf (input,"%d,", (daten+i) );//oder &daten[i] fprintf(stdout," %d",*(daten+i) );//oder daten[i] }
-
Das funktioniert, danke!