Gast
2006-02-04, 00:11:40
Ich sitze grade an einem Problem bei C.
Ich hab mir ein Struktur-Array erzeugt, kann dieses mit Daten füllen und will es dann unsortiert und sortiert in eine Datei schreiben.
Dafür hab ich die Funktion "file_write", der ich das Array übergeben kann.
Es funktioniert auch beim unsortierten Array.
Aber wenn ich das Array durch die Funktion "sortiere" schieße, bleibt die Datei leer. Weiß hier vielleicht jemand was ich falsch gemacht haben könnte?
Und vielleicht weiß auch jemand, wie ich in der main-Funktion vek[i].name mit einer leeren Zeichenkette füllen kann.
Besten Dank schonmal fürs schauen!
Anbei das Listing:
#include <stdio.h>
#include <string.h>
struct daten{
long mitnr; //zwischen 1000 und 50000
char name[30];
int anstell; //zwischen 1998 und 2050
};
int trigger=0; //Pseudo-Bool zum Abbruch bei Eingabe mitnr=0
int anz=0; //Anzahl der real gefuellten Struktur-Vektor-Elemente
int eingabe(struct daten neu[], int i)
{
int an;
long mit;
printf("\nMitarbeiternummer:");
scanf("%d",&mit);
if(mit != 0)
{
if(mit>=1000 && mit<=50000)
{
neu[i].mitnr=mit;
printf("Name:");
fflush(stdin);
fgets(neu[i].name,30,stdin);
printf("Anstellungsjahr:");
scanf("%d",&an);
if(an>=1998 && an <=2050)
neu[i].anstell=an;
else
printf("\nFalscher Datenbereich");
}
else
printf("\nFalscher Datenbereich");
}
else
{
anz=i; //Wert bis wohin der Vektor in Datei geschrieben werden soll
trigger=1; //Bool-Wert um RestVektor mit 0 zu füllen
}
}
void file_write(struct daten dat[], char *str)
{
FILE *fp;
int i;
fp=fopen(str,"w+b");
if(fp == NULL)
printf("Datei konnte nicht erstellt werden");
else
{
for(i=0;i<anz;i++)
{
fprintf(fp , "%ld %s \t %d\n" , dat[i].mitnr,dat[i].name,dat[i].anstell);
}
}
}
void sortiere(struct daten sort[])
{
int i;
FILE *fp;
struct daten *temp;
temp=(struct daten *)malloc(sizeof(struct daten *));
if(temp == NULL)
{
printf("Kein Speicher reservierbar\n");
return;
}
else
{
//Bubble-Sort
while(anz--)
{
for(i=1; i<=anz; i++)
{
if(sort[i-1].mitnr > sort[i].mitnr)//linkes Element > rechtes Element
{
*temp=sort[i]; //rechtes Element sichern
sort[i]=sort[i-1]; //tausche Elemente
sort[i-1]=*temp; //rechts Element auf linkes setzen
}
}
}
}
file_write(sort,"sort.txt"); //Sortierten Struktur-Vektor ausgeben
}
void main()
{
struct daten vek[40];
int i;
for(i=0; i<40;i++)
{
if(trigger != 1) //solange mitnr!=0 normale Dateneingabe
eingabe(vek,i);
else
{
//printf("Vektor %d wird mit 0 initialisiert\n",i);
vek[i].anstell=0;
vek[i].mitnr=0;
//vek[i].name='\0';
}
}
file_write(vek,"unsort.txt");
sortiere(vek);
}
Ich hab mir ein Struktur-Array erzeugt, kann dieses mit Daten füllen und will es dann unsortiert und sortiert in eine Datei schreiben.
Dafür hab ich die Funktion "file_write", der ich das Array übergeben kann.
Es funktioniert auch beim unsortierten Array.
Aber wenn ich das Array durch die Funktion "sortiere" schieße, bleibt die Datei leer. Weiß hier vielleicht jemand was ich falsch gemacht haben könnte?
Und vielleicht weiß auch jemand, wie ich in der main-Funktion vek[i].name mit einer leeren Zeichenkette füllen kann.
Besten Dank schonmal fürs schauen!
Anbei das Listing:
#include <stdio.h>
#include <string.h>
struct daten{
long mitnr; //zwischen 1000 und 50000
char name[30];
int anstell; //zwischen 1998 und 2050
};
int trigger=0; //Pseudo-Bool zum Abbruch bei Eingabe mitnr=0
int anz=0; //Anzahl der real gefuellten Struktur-Vektor-Elemente
int eingabe(struct daten neu[], int i)
{
int an;
long mit;
printf("\nMitarbeiternummer:");
scanf("%d",&mit);
if(mit != 0)
{
if(mit>=1000 && mit<=50000)
{
neu[i].mitnr=mit;
printf("Name:");
fflush(stdin);
fgets(neu[i].name,30,stdin);
printf("Anstellungsjahr:");
scanf("%d",&an);
if(an>=1998 && an <=2050)
neu[i].anstell=an;
else
printf("\nFalscher Datenbereich");
}
else
printf("\nFalscher Datenbereich");
}
else
{
anz=i; //Wert bis wohin der Vektor in Datei geschrieben werden soll
trigger=1; //Bool-Wert um RestVektor mit 0 zu füllen
}
}
void file_write(struct daten dat[], char *str)
{
FILE *fp;
int i;
fp=fopen(str,"w+b");
if(fp == NULL)
printf("Datei konnte nicht erstellt werden");
else
{
for(i=0;i<anz;i++)
{
fprintf(fp , "%ld %s \t %d\n" , dat[i].mitnr,dat[i].name,dat[i].anstell);
}
}
}
void sortiere(struct daten sort[])
{
int i;
FILE *fp;
struct daten *temp;
temp=(struct daten *)malloc(sizeof(struct daten *));
if(temp == NULL)
{
printf("Kein Speicher reservierbar\n");
return;
}
else
{
//Bubble-Sort
while(anz--)
{
for(i=1; i<=anz; i++)
{
if(sort[i-1].mitnr > sort[i].mitnr)//linkes Element > rechtes Element
{
*temp=sort[i]; //rechtes Element sichern
sort[i]=sort[i-1]; //tausche Elemente
sort[i-1]=*temp; //rechts Element auf linkes setzen
}
}
}
}
file_write(sort,"sort.txt"); //Sortierten Struktur-Vektor ausgeben
}
void main()
{
struct daten vek[40];
int i;
for(i=0; i<40;i++)
{
if(trigger != 1) //solange mitnr!=0 normale Dateneingabe
eingabe(vek,i);
else
{
//printf("Vektor %d wird mit 0 initialisiert\n",i);
vek[i].anstell=0;
vek[i].mitnr=0;
//vek[i].name='\0';
}
}
file_write(vek,"unsort.txt");
sortiere(vek);
}