Also erst mal vielen Dank!!! ich hab jetzt die ganze Zeit hin und her probiert. und es werden trotzdem keine Werte in die Datei geschrieben, die ist immer leer. Ich weiß mir jetzt keinen Rat mehr
Beiträge von Baerchen1
-
-
Na, ich weiß auch nicht so recht.. ich hab das Gefühl, dass die Werte nicht richtig in der Datei gespeichert werden. und deswegen wird auch nichts ausgegeben, wenn ich von der Datei lesen will.
-
Hallo. bitte helft mir, ich hab morgen Prüfung im C-Programmieren!!
Ich hab grad ein Programm egschrieben, funktioniert aber noch nicht ganz richtig, wer kann mir büdde sagen, was da falsch ist?? :engel:Das Programm liest n orte ein(x und y Koordinaten), die in eine Liste eingelesen werden sollen. Dann in untere Matrix die Entfernungen zwischen allen Orten.. Danach sollen die Koord. in eine binäre Datei gespeichert werden, und von da wieder gelesen und ausgegeben werden:
/*-----------------------------------------------------------------------
SS 2005 - Aufgabe 35 (Listen, Dateien und Matrizen)
-------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define maxN 5typedef struct ORT {
float x,y;
struct ORT *n;
} ort;struct ORT *n=NULL;
void EntfMatrix(ort *LA, int *N, float A[maxN][maxN])
{ int i,j; float x[maxN],y[maxN];
struct ORT *anfang=NULL;
printf("Anzahl Orte: "); scanf("%d",N);
if (*N>maxN) *N=maxN;
for (i=0;i<*N;i++)
{ if((LA=(struct ORT*)malloc(sizeof(struct ORT)))!=NULL)
{n=(struct ORT*)malloc(sizeof(struct ORT));
printf("Ort %d - x-Wert: ",i+1); scanf("%f",&LA->x);
x[i]=LA->x;
printf(" y-Wert: "); scanf("%f",&LA->y);
y[i]=LA->y;
LA->n=anfang;
anfang=LA;
}
}for (i=0;i<*N;i++)
{for (j=0;j<i;j++)
{A[i][j]=sqrt( ( fabs((x[i])*(x[i]) - (x[j])*(x[j])) ) +
( fabs((y[i])*(y[i]) - (y[j])*(y[j])) ) );
printf("%.2f ",A[i][j]);
}
printf("\n");
}
}//------------------------------------------------------------------------
void SpeichAufDatei(ort *LA, char datname[])
{FILE *ausdatei; ort *LA_Ausgabe=NULL;
ausdatei=fopen(datname,"wb");
LA_Ausgabe=LA;
while(LA_Ausgabe!=NULL)
{fwrite(&LA_Ausgabe->x,sizeof(ort),1,ausdatei);
printf("\n%f ",LA->x);
fwrite(&LA_Ausgabe->y,sizeof(ort),1,ausdatei);
printf("%f",LA_Ausgabe->y);
LA_Ausgabe=LA_Ausgabe->n;
}
fclose(ausdatei);
}
//------------------------------------------------------------------------
ort *BildeListeAusDatei(char datname[])
{FILE *eindatei; ort *LA,*LL,*vorg=NULL;
int anz=0;
printf("eingelesen: \n");
eindatei=fopen(datname,"rb");
if (eindatei==NULL) {printf("Datei nicht gefunden\n"); return NULL;}
while (fread(&LA,sizeof(LA),1,eindatei) != NULL)
{printf("x[%d]= %f y[%d]= %f\n",anz,LA->x,anz,LA->y);
anz++;
LL=malloc(sizeof(ort));
LL->n=NULL;
if (anz>1) vorg->n=LL; //Vorg.mit neuem Listelem. verknuepfen
vorg=LL;
if (anz==1) LA=LL; //Adr.des 1.Elem.ist Listadr.
LL->ort=ort; //Datensatz zum Ort in Listelem. einfuegen
}
fclose(eindatei);
return LA;
}//------------------------------------------------------------------------
void main()
{ float A[maxN][maxN];
int N,anz;
char datname[33]="C:/DJGPP/bin/pruef35.bin";
ort *LA=NULL;
clrscr();
EntfMatrix(LA,&N,A);
SpeichAufDatei(LA,datname);
LA=BildeListeAusDatei(datname);
getche();
}