Non capisci il mio problema o l'esercizio?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct cinema {
  char nome[20];
  int posto;
  int ora;
  int minuti;
 };
struct cinema CERCA(char *nome, struct cinema *c) {
 struct cinema retval;
 int i = 0;
 while (i<4 && (strcmp (nome, c[i].nome) != 0)) {
    i++;
  }
  if(i<4)
    retval = c[i];
  else
    retval.nome[0] = '\0';
  return retval;
  }
  
int main(int argc, char **argv) {
 
 FILE *fp;
 fp = fopen(argv[1], "a+");
 if(fp == NULL) {
 printf("errore nell'apertura\n");
 exit(1);
 }
 
struct cinema *cine;
cine = malloc(sizeof(struct cinema)*4);      //4 sono le righe del codice
int i;
for(i=0; i<4; i++) {
fscanf(fp, "%s, %d, %d:%d\n", &cine[i].nome, &cine[i].posto, &cine[i].ora, &cine[i].minuti);
printf("%s, %d, %d:%d\n", cine[i].nome, cine[i].posto, cine[i].ora, cine[i].minuti);       //non stampa correttamente il contenuto del file
}
char scelta;
printf ("inserisci opzione: a) ricerca, b) aggiungi\n");
scanf("%c", &scelta);
if(scelta == 'a') {
 char nome[20];
 printf("inserisci nome: ");
 scanf("%[^\n]", &nome);
 getchar();
 struct cinema ricerca;
 ricerca = CERCA(nome, cine);
 printf("dati: %s, %d, %d:%d\n", ricerca.nome, ricerca.posto, ricerca.ora, ricerca.minuti);
 }
 
 if(scelta == 'b') {
  int quanti;
  printf("quanti ne vuoi inserire?");
  scanf("%d", &quanti);
  
  for(i=4; i<4+quanti; i++) {
  printf("nome: ");
  scanf("%[^\n]", &cine[i].nome);
  getchar();
  printf("posto:");
  scanf("%d", &cine[i].posto);
  printf("ora: ");
  scanf("%d", &cine[i].ora);
  printf("minuti: ");
  scanf("%d", &cine[i].minuti);
  
  fprintf(fp, "%s, %d, %d:%d\n", cine[i].nome, cine[i].posto, cine[i].ora, cine[i].minuti);
  }
 }
 
 free(cine);
 close(fp);
return 0;
}