Есть пара проблем, которые я вижу с вашим кодом.Сначала я попытаюсь исправить это, а затем приведу полный пример того, как я буду делать то, что вы хотите сделать.
struct clientName {
char name[30];
char gender[10];
};
struct clientAge {
int age;
};
Почему вы используете 2 структуры для 1 набора данных?
Вместо этого используйте
struct data
{
char name[30];
char gender[10];
int age;
};
.
fwrite((char *)&NAME, sizeof(struct clientName), 1, fp);
можно записать как: fwrite(&client, sizeof(client), 1, fp);
while((fread((char *)&NAME, sizeof(struct clientName), 1, fp)) == 1
& (fread((char *)&AGE, sizeof(struct clientAge), 1, fp)) == 1)
можно записать как: while (fread(&client, sizeof(client), 1, fp))
, после чего вам нужно только сравнить переменную client.name с вашим введенным пользователем именем, например:
if (strcmp(client.name, input) == 0)
Обратите внимание, что я решил использовать только одну структуру специально, поскольку не понимаю, почему было бы полезно использовать 2 структуры в вашем случае использования.Однако если вам необходимо использовать 2 структуры, вы можете просто добавить к ним целочисленную переменную «ID» и найти все точки данных для любого заданного имени таким образом.
Пример полного кода:
struct data
{
char name[30];
char gender[10];
int age;
};
int main(void)
{
struct data client;
FILE* fp;
char ch = 0;
do
{
printf("Enter Name: ");
scanf("%s", client.name);
printf("Enter Gender: ");
scanf("%s", client.gender);
printf("Enter Age: ");
scanf("%d", &client.age);
fp = fopen("Data.dat", "ab");
fwrite(&client, sizeof(client), 1, fp);
fclose(fp);
printf("continue? \n");
scanf(" %c", &ch);
} while (ch != 'n'); // continuously appends file till letter n is read;
char input[30]; // user input
printf("name?\n"); // please note that you could pretty much use every other data point here.
scanf("%s", input);
struct data Read; // used different for showcasing purposes only
fp = fopen("Data.dat", "rb");
while (fread(&client, sizeof(client), 1, fp))
{
if (strcmp(client.name, input) == 0) // compare variable with user input
{
printf("%s", client.name);
printf(" %s", client.gender);
printf(" %d y/o", client.age);
printf("\n");
}
}
return 0;
}