Z tego co wiem tryb r+ służy do odczytywania i dopisywania, tymczasem obserwuje, że jeśli coś wczytuje to potem nie moge już dopisywać do pliku. Jeśli się mylę, proszę tym bardziej o pomoc.
Może plik, do którego chcesz dopisać jest pusty? W takim wypadku, to zachowanie może różnić się w zależności od systemu operacyjnego, gdyż wskaźnik pliku wskazuje za jego końcem. Uniksy, z tego, co pamiętam, powinny początek pliku wypełnić zerami, ale pewny nie jestem.
Dobra tak sobie uświadomiłem, że trochę za bardzo się zasugerowałem tym co napisałeś oraz umieściłem tylko jedną linijkę tekstu do przetestowania, stad wydawało mnie się, że jest OK.
To co robi twój/mój kod, to wczytuje pierwszą linię tekstu (o ile jest mniejsza niż buffor) fgets przerywa wczytywanie, gdy napotka NL albo EOF i następnie ponieważ jest ustawiony w trybie “r+” to zaczniesz pisać po drugiej linijce (nadpisując ją - replace). Wprowadź 3 linijki tekstu tak, by 2 linia w pliku była inna niż ten stały tekst w kodzie i zobacz efekty.
Jeśli chcesz coś dokleić na koniec używając “r+” to musisz przeiterować plik, tak aby wskaźnik wylądował na jego końcu (do napotkania EOF) i dopiero zacząć pisać, albo ustawić tryb “a” (append) i wtedy zaczniesz po prostu dopisywać do pliku na końcu.