Hi,
ich muss aus einer .txt Daten einlesen und in einem dynamischen Feld speichern. Dieses soll die Größe immer verdoppeln, wenn es voll ist. Dazu soll Speicherplatz mit "calloc" reserviert werden.
Beim Einlesen der Datei soll auch die erste Zeile übersprungen werden.
Mein Problem ist jetzt, dass die Werte nicht korrekt eingelesen werden. Normalerweise würde ich das ganze in einer while-Schleife machen, jedoch endet diese nicht (deswegen auskommentiert). Habe erstmal einen Zähler bis 21 eingebaut, da ich 21 Zeilen einlesen muss.
Kann mir jemand helfen, wo das Problem liegt?
Edit: Zudem springt er nicht in die anderen Zeilen, er versucht die erste einzulesen, was auch teilweise stimmt. Danach jedoch kommen komische Werte raus.
ich muss aus einer .txt Daten einlesen und in einem dynamischen Feld speichern. Dieses soll die Größe immer verdoppeln, wenn es voll ist. Dazu soll Speicherplatz mit "calloc" reserviert werden.
Beim Einlesen der Datei soll auch die erste Zeile übersprungen werden.
Mein Problem ist jetzt, dass die Werte nicht korrekt eingelesen werden. Normalerweise würde ich das ganze in einer while-Schleife machen, jedoch endet diese nicht (deswegen auskommentiert). Habe erstmal einen Zähler bis 21 eingebaut, da ich 21 Zeilen einlesen muss.
Kann mir jemand helfen, wo das Problem liegt?
Code:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int objektnr;
char bezeichnung [20];
} messobjekt;
typedef struct {
messobjekt *objekt;
int messnr;
double messwert;
} messwert;
int main () {
int size = 3;
messwert *dynfeld;
dynfeld = (messwert*)calloc(size, sizeof(messwert));
dynfeld->objekt = (messobjekt*)calloc(size, sizeof(messobjekt));
FILE * file;
file = fopen("messungen.txt", "r");
int tempmessnr;
double tempmesswert;
int tempobjektnr;
char tempbezeichnung [20];
int zaehler = 0;
int wieoftdurchlaufen = 0;
fseek(file, 50L, SEEK_SET);
while (zaehler < 21) {
//while (feof(file)==0) {
fscanf(file, "%d,%[^,]%c,%d,%,lf\n", &tempobjektnr, &tempbezeichnung, &tempmessnr, &tempmesswert);
//fscanf(file, "%d,%[^,]%c,%d,%lf", &dynfeld[zaehler].objekt->objektnr, &dynfeld[zaehler].objekt->bezeichnung, &(dynfeld[zaehler].messnr), &(dynfeld[zaehler].messwert));
//printf("\nWerte: %d,%s,%d,%lf", dynfeld[zaehler].objekt->objektnr, dynfeld[zaehler].objekt->bezeichnung, dynfeld[zaehler].messnr, dynfeld[zaehler].messwert);
printf("\nWerte: %d,%s,%d,%lf", tempobjektnr, tempbezeichnung, tempmessnr, tempmesswert);
//Rechnung noch nicht richtig? evtl wieoftdurchlaufne-1
if (zaehler == 3*(2^(wieoftdurchlaufen)) ) {
dynfeld = (messwert*)realloc(dynfeld, 2*zaehler*sizeof(messwert));
wieoftdurchlaufen = 0;
printf("\nSpeicher erfolgreich verdoppelt!");
wieoftdurchlaufen++;
}
zaehler++;
}
// int zaehler2 = 0;
// int feldLaenge = sizeof(dynfeld)/sizeof(messwert);
// for (; zaehler2 < feldLaenge; zaehler++) {
// printf("\n%d,%s,%d,%f", dynfeld[zaehler].objekt->objektnr, dynfeld[zaehler].objekt->bezeichnung, dynfeld[zaehler].messnr, dynfeld[zaehler].messwert);
// }
return 0;
}
Edit: Zudem springt er nicht in die anderen Zeilen, er versucht die erste einzulesen, was auch teilweise stimmt. Danach jedoch kommen komische Werte raus.
Zuletzt bearbeitet: