?
fwrite und fread bietet eine möglichkeit mehrere strukturen in einem rutsch zu
lesen/schreiben
wenn du mit deiner methode mehrere hundert namen lesen/schreiben willst, dann mal viel spass beim tippen.
mal so als anregung:
#include <stdio.h>
struct datensatz
{
char Name[50+1];
unsigned Nr;
char PLZ[5+1];
}daten[4] =
{
{"Name1", 1, "11111"},
{"Name2", 2, "22222"},
{"Name3", 3, "33333"},
{"Name4", 4, "44444"}
};
int speichern( int n, char* fname )
{
FILE* fp;
if ( (fp = fopen( fname, "w")) == NULL )
{
fprintf( stderr, "Can't open file." ); return 1;
}
if( n != fwrite( daten, sizeof(struct datensatz), n, fp ) )
{
fprintf( stderr, "Failed on fwrite." );
fclose(fp);
return 1;
}
fclose(fp);
return 0;
}
int name_suchen( char *fname, int n, char* name )
{
FILE* fp;
int i = 0;
if ( (fp = fopen( fname, "r")) == NULL )
{
fprintf( stderr, "Can't open file." ); return 1;
}
if( n != fread( daten, sizeof(struct datensatz), n, fp ) )
{
fprintf( stderr, "Failed on fread." );
fclose(fp);
return 1;
}
fclose(fp);
for ( i = 0; i < n; i++ )
{
if ( strcmp( daten[i].Name, name ) == 0 )
{
printf("%s gefunden.\n", name );
return 0;
}
}
printf( "%s nicht gefunden.\n" );
return 1;
}
int main(void)
{
int n = 4;
char path[256+1];
if ( speichern( n, "test.dat" ) ) return 1;
printf("%d Datensaetze gespeichert %s\n" , n, getcwd(path, sizeof(path)-1) );
name_suchen ( "test.dat", n, "Name3" );
name_suchen ("test.dat", n, "RUMPELSTILZCHEN" );
getchar();
return 0;
}