Stai facendo molta confusione.

In primis, fflush(stdin) non è portabile; alcuni compilatori (ad esempio VC++) ne consentono l'uso per svuotare il buffer di input, con altri (gcc) non fa niente; in generale, lo standard ne prevede l'uso solo per i file aperti in output, quindi evita fflush(stdin).

Funziona ma se inserisco il carattere di controllo "X" mi va a mettere "0" e non "10" nell'ultima posizione del vettore. Qualcuno da dirmi perchè? Grazie
Perché
1) stai usando lo specificatore di formato "%d" quando quello che vuoi acquisire non è un intero. Se inserisci X, la scanf vede un carattere che non è un intero e quindi non lo acquisisci;
2) ancora peggio, stai usando "%d" ma passando un puntatore a char! Questo fa sì che la scanf vada a sfasciare lo stack, corrompendo i dati delle variabili locali. Se vuoi acquisire caratteri devi usare %c e una variabile char, se vuoi acquisire numeri usi %d e una variabile int.
Allora ho risolto in questo modo, considerando l'inserimento del carattere X come NULL :
È ancora sbagliato, per gli stessi motivi di cui sopra. E NULL si usa con i puntatori, non con i caratteri, per cui qui non c'entra niente.

Personalmente, io mi limiterei ad acquisire una stringa con tutto l'ISBN e poi farne il parsing separatamente.
codice:
char strISBN[100]={0};
int ISBN[10];
fgets(strISBN, sizeof(strISBN), stdin);
int i=0;
for(char *c=strISBN; *c && i<10; ++c, ++i)
{
    if(c>='0' || c<='9')  // converti i numeri
        ISBN[i]=*c-'0';
    else if(c=='x' || c=='X')    // converti la X
        ISBN[i]=10;
    else if(c==' ' || c=='-' || c=='\n')     // ignora i trattini e gli spazi
        --i;
    else
        printf("Carattere non valido: %c", *c);
}