OriginalChar is an array of characters.
When it is cast to an integer (int)OriginalChar the result is the address of the array, as an int. Subtract key from that and you get a number corresponding to the address of some memory location before the start of the array. None of that really makes sense to me, I've no idea what it is supposed to do.
The line where the compiler warns of loss of precision is where an integer value is assigned to char answer. In some circumstances that might be acceptable, here I can't say, but I suspect that is a relatively minor issue in code which has more serious problems.