$\tt fft$ vs. $\tt fftshift$ in MATLAB: Please explain
I believe you simply misunderstand what these functions are supposed to do. You get different results because they are not meant to do the same thing. I think it would be relevant that you read the documentation of these 2 functions.

Answers below:



  How do I decide which one to use?



fft : Use it when you need to compute the Discrete Fourier Transform of your time series
fftshift : Use it when you want to to swap the position of the negative and positive frequencies of a spectrum gotten with fft()


  Which is "correct"?


What do you consider correct ? fft will be correct if you need a frequency spectrum of your time domain signal. It doesn't really make sense to apply fftshift on a time domain series.

  Why are they giving such different answers?


Because they don't do the same thing.

  Why is the fftshift only real-valued while the fft is complex?


fft computes the discrete Fourier transform and by definition the output is complex.   fftshift doesn't compute anything except swaping the position of the samples, so if your input is real, you get real output.


Normally we use these two functions this way : spectrum = fftshift(fft(x))