Ce que tu constates est normal.
Le tableau numtrain contient des pointeurs sur des tableaux de char.
A chaque fois tu fais l'affectation numtrain[x] = inData
qui ne transfère pas de données puisque l'opération ne met en oeuvre que des pointeurs. Donc chaque élément de numtrain pointe sur inData. Le contenu de inData change à chaque réception de données donc tu relis la dernière valeur acquise.
Si tu veux conserver la valeur unique pour chaque train, il faut que numtrain soit un tableau de chaines de caractères. Il faudrait donc le définir ainsi:
char numtrain[3][64]
Et les affectations de valeurs de inData vers numtrain doivent se faire par strcpy ou strncpy
strncpy(numtrain[i], inData,64)