Как это объяснить
судя по всему код у вас выполняется в цикле. Вы вводите строку и нажимаете enter -- fgets читает первые 30 символов, оставляя остальное в буфере ввода -- printf их выводит, цикл начинается снова, fgets читает 30 следующих символов -- то что осталось в буфере после предыдущего чтения. Если хотите очистить буфер используйте fflush(stdin).