L'ultima scanf() è errata

codice:
scanf ("%30f", cantanti[I].dischi);
innanzitutto il secondo argomento deve essere un puntatore alla variabile a cui vuoi assegnare un valore leggendolo da tastiera.

Poi, a che ti serve specificare "30" del codice di formato? Tra l'altro, per leggere un valore double (e il campo dischi è proprio di questo tipo) il codice di formato da utilizzare è %lf ("Long Float")

codice:
scanf ("%lf", &cantanti[I].dischi);
Ah, già che ti trovi includi pure l'header file string.h per la funzione strcpy().

Una curiosità: perché usi un tipo double per "dischi" che dovrebbe essere un tipo intero? Non penso sia perché hai bisogno di 64 bit per rappresentare il numero dei dischi di un autore