Yes. By default, stdout/stdin are line buffered, unless they have been redirected to a file. (The standard actually says that it's line buffered if it is connected to an "active device", a.k.a. a terminal.) All other FILE objects are fully buffered by default. So if you are fprintf()'ing to a file, even a newline won't necessarily cause a flush.
Always flush when you print any sort of prompt. And it's usually a good idea to flush whenever you are printing debug or log messages. If your program crashes, whatever data is in the buffer won't get flushed. That data might contain critical information that could help you solve the crash, so you should ensure that it actually gets flushed.