ciao. Il programma compila ma purtroppo nel momento in cui dovrebbe stampare a video gli utenti il cui nome inizia con "me" non funziona, così come non stampa a video gli utenti che hanno un punteggio maggiore di una soglia minima inseriti da input.

codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define DIM 32


typedef struct {
   char name[DIM];
   int points;
} user;

int readPoints (char usersFile[], user results[], int maxDim, int
minPoints);

int readPoints (char usersFile[], user results[], int maxDim, int
minPoints){

   FILE *f;
   int i=0, stop=0, temp_1=0;
char temp[33];

   f= fopen(usersFile, "wb");
   if (f == NULL)
       return -1;

do{
printf ("Inserire il nome: ");
scanf("%s", temp);
if (strcmp(temp,"fine")==0)
stop= 1;
else
fwrite(temp, sizeof(char[33]), 1, f);
printf("Inserire il punteggio: ");
scanf("%d", &temp_1);
fwrite(&temp_1, sizeof(int), 1, f);
} while (!stop && (strcmp(temp,"fine") != 0));

   while (i<maxDim && (fread(&results[i], sizeof(user), 1, f)>0)){   /*
fin tanto che i è minore della dim max inserita da utente e c'è qualcosa da
leggere */
       if (results[i].points >= minPoints)
       printf ("s", results[i].name);
       i++;
   }

   fclose(f);
   return i;
}

int main()
{
   user *v;
   int x=0, y=0, l=0, i;

   printf ("Inserire il numero di clienti salvati su file: ");
   scanf ("%d", &x);

   v= (user*) malloc(sizeof(user)*x);

   printf ("Inserire il punteggio minimo: ");
   scanf ("%d", &y);

   l= readPoints("punti.dat", v, x, y);

   for (i=0; i<l; i++){
   if ((v[i].name[0] == 'm') && (v[i].name[1] == 'e'))
       printf("L'utente %s ha %d punti.\n", v[i].name, v[i].points);}

   free (v);
return 0;

}