Quote Originariamente inviata da rikyeko Visualizza il messaggio
immagino che in memoria avrai una List<cantanti> o qualcosa di simile, in questo caso puoi utilizzare le Linq ed estrarre i dati come vuoi, presumo inoltre che dalla struct che hai postato di esempio hai volontariamente rimosso i modificatori di accesso, perchè se i campi per i quali vuoi filtrare non sono public (anche in sola lettura), non puoi vederli e quindi nemmeno filtrarli

ad esempio, ammettendo che la lista di cui sopra si chiami 'ListaCantanti'
codice:
var result = ListaCantanti.Where(c => c.genere == "house").Select(c => c).ToList();
Qualcosa di questo tipo dovrebbe aiutarti
codice:
struct cantanti
{
    int id;
    char nome[maxcaratteri];
    char cognome[maxcaratteri];
    char nazionalita[maxcaratteri];
    char sesso[2];
    char genere[maxcaratteri];
};




    case 1: //la scelta 1 e' la scrittura dei cantanti su file
                {system("cls");//ripulisce lo schermo
                FILE *outfile;//puntatore a file

    //lista dei cantanti dichiarati come "input"
    struct cantanti input1 = {1, "bob       ", "sinclair  ","francese","m","house\0"};
    struct cantanti input2 = {2, "michael   ", "jackson   ","americana","m","pop\0"};
    struct cantanti input3 = {3, "loredana  ", "berte'    ","italiana","f","rock\0"};
    struct cantanti input4 = {4, "albano    ", "carrisi   ","italiana","m","leggera\0"};
    struct cantanti input5 = {5, "tim       ", "bergling  ","svedese","m","house\0"};
    struct cantanti input6 = {6, "tiziano   ", "ferro     ","italiana","m","pop\0"};
    struct cantanti input7 = {7, "fabrizio  ", "tarducci  ","italiana","m","rap\0"};
    struct cantanti input8 = {8, "david     ", "guetta    ","francese","m","elettronica\0"};
    struct cantanti input9 = {9, "sfera     ", "ebbasta   ","italiana","m","trap\0"};
    struct cantanti input10 = {10, "gue'    ", "pequeno   ","italiana","m","rap\0"};
    struct cantanti input11 = {11, "vittorio", "dimango   ","italiana","m","house\0"};
    struct cantanti input12 = {12, "eros    ", "ramazzotti","italiana","m","pop\0"};
    struct cantanti input13 = {13, "antonello", "venditti","italiana","m","leggera\0"};
    struct cantanti input14 = {14, "fabrizio", "deandre' ","italiana","m","leggera\0"};
    struct cantanti input15 = {15, "capo    ", "plaza     ","italiana","m","trap\0"};
    struct cantanti input16 = {16, "dark    ", "pologang  ","italiana","m","trap\0"};
    struct cantanti input17 = {17, "sonny   ", "skrillex  ","americano","m","elettronica\0"};
    struct cantanti input18 = {18, "boys    ", "noize     ","tedesco","m","elettronica\0"};
    struct cantanti input19 = {19, "fabio   ", "marracash","italiana","m","rap\0"};
    struct cantanti input20 = {20, "roger   ", "waters    ","inglese","m","rock\0"};
    struct cantanti input21 = {21, "jimi    ", "hendrix   ","inglese","m","rock\0"};

//apre il file cantanti.dat in modalita' write
    outfile = fopen ("cantanti.dat", "w");
    if (outfile == NULL)
    {
        fprintf(stderr, "\nErrore apertura file\n");//non riesce ad aprire il file e segna un messaggio di errore
        exit (1); //errore di uscita 1
    }


    //inizio scrittura su file di ogni singolo artista
    
    fprintf(outfile, "%d\t%s\t%s\t%s\t%s\t%s\n\n", input1.id, input1.nome, input1.cognome, input1.nazionalita, input1.sesso, input1.genere);
    fprintf(outfile, "%d\t%s\t%s\t%s\t%s\t%s\n\n", input2.id, input2.nome, input2.cognome, input2.nazionalita, input2.sesso, input2.genere);
ECC...
   
    //se fwrite e' diverso da 0 allora la scrittura va a buon fine
    if(fwrite != 0)
        printf("scrittura completata\nI cantanti sono stati inseriti\n\n");
    else //altrimenti la scrittura non puo' essere eseguita
        printf("errore scrittura cantanti !\n");


    fclose(outfile); //chiusura del file


                system("pause");
                system("cls");}
                break;


    case 2: //la scelta 2 e' la visualizzazione su schermo di tutti i cantanti
                {system("cls");
                FILE *outfile;
                outfile = fopen ("cantanti.dat", "r"); //apro il file in lettura


    struct cantanti input;
//*******************************************************************************************************************************************************************************
    printf("<ID>\t<NOME>\t\t<COGNOME>\t<NAZIONALITA'>\t     <SESSO>\t<GENERE MUSICALE>\n");
    //1
    fscanf(outfile, "%d %s %s %s %s %s", &input.id, input.nome, input.cognome, input.nazionalita, input.sesso, input.genere);
    printf("%d\t%s\t\t%s\t  %s\t        %s       %s\n", input.id, input.nome, input.cognome, input.nazionalita, input.sesso, input.genere);
    printf("---------------------------------------------------------------------------------------\n");
    //2
    fscanf(outfile, "%d %s %s %s %s %s", &input.id, input.nome, input.cognome, input.nazionalita, input.sesso, input.genere);
    printf("%d\t%s\t\t%s\t\t  %s\t        %s\t%s\n", input.id, input.nome, input.cognome, input.nazionalita, input.sesso, input.genere);
    printf("---------------------------------------------------------------------------------------\n");
     
    fclose(outfile); //chiusura file
ecco il codice , scusa il disordine ma l importante e' farti capire come e' strutturato il programma