Ausgaben werden aus Performancegründen normalerweise oft erst in einen internen Buffer geschrieben (buffered I/O) und immer erst wenn der voll ist geht's wirklich in die Datei die darunter liegt, damit man gleich ganze Blöcke auf einmal schreiben kann. Das nennt man dann flushen (zu deutsch: runterspülen).
Explizit flushen tut man also eben immer dann, wenn man sicherstellen muss, dass die Ausgabe auch wirklich schon passiert ist.
Z.B. wenn du eine Aufforderung an den Benutzer etwas einzugeben in die Konsole schreibst, willst du natürlich sicher sein, dass der Benutzer diese Aufforderung auch zu sehen bekommt bevor du auf die Eingabe wartest. Auch wenn es unwahrscheinlich ist, könnte es natürlich (unter einem hypothetischen, äußerst eigenartigen Compiler bzw. Betriebssystem) passieren, dass deine Aufforderung nur in den internen Buffer geschrieben wurde und noch nicht auf dem Bildschirm zu sehen ist.
Ein anderes Beispiel wäre eine Logdatei. Wenn du ein Log schreibst, möchtest du sichergehen dass deine Logausgaben auch wirklich in der Datei landen bevor das Programm weiterläuft. Denn wenn das Programm abstürzt fehlen sonst evtl. für die Fehlersuche wichtige Informationen im Log, da die zum Crashzeitpunkt nur im Buffer waren und noch nicht auf der Festplatte.
Ich denk aber nicht dass das für dich im Moment irgendwie von belangen wäre