Odpowiedź
W załączniku. Najprościej jak tylko się dało... Wynik w drugim załączniku.
- Konsekwentnie używałam auto. Wprawdzie w przypadku pętli gdzie zmienna jest liczbą całkowitą ( int, a właściwie prawidłowo size_t ) użycie auto pozornie nie wydaje się czegokolwiek upraszczać, jednak gdzie indziej różnica jest wyraźnie widoczna np. const auto& zamiast pair<string, daneMiesięczne>.
- W obu przypadkach ( sukces przy otwarciu pliku wynik5.txt i brak sukcesu ) program kończy się z return 0. Nie wpisywałam return 0, ponieważ kompilator zawsze automatycznie return 0 wstawia. Niemożliwość zapisu pliku wynikowego jest przewidzianym zdarzeniem, dlatego tam też jest domyślnie return 0.
- Jest możliwość uzyskania polskich liter również używając kompilatora MSVC (Visual Studio), ale pojawiają się wtedy inne ograniczenia. Możesz porównać gdy popatrzysz na moje późniejsze rozwiązanie tego samego zadania (rozwiązałam je nieco inaczej) → brainly.pl/zadanie/21185881
Wyjaśnienia
- Używając bieżących wersji GCC program zadziała bez żadnych zmian. Można usunąć pierwszą linię ( #define ) ponieważ jest ona w przypadku GCC zbędna. Bieżąca wersja oznacza GCC 10.1 wydany 7 maja 2020 r. lub nowszy. Najnowszą wersją jest GCC 11.2 z 28 lipca 2021 r.
- Używając bieżących wersji kompilatora clang kod, który podałam, zadziała bez żadnych zmian. Można usunąć pierwsza linię ( #define ) bo jest ona w przypadku kompilatora clang zbędna.
- Używając Visual Studio należy w pierwszych dwóch wywołaniach fprintf() zamienić polskie znaki na odpowiadające im litery ASCII, inaczej w pliku wynikowym będą w miejscach polskich liter znaki zapytania.
- Używając starszych wersji GCC – np. Code::Blocks używa starszych wersji GCC ! – należy w nazwach zmiennych zamienić polskie znaki na odpowiadające im litery ASCII, inaczej nie będzie można skompilować. Można usunąć pierwszą linię ( #define ) ponieważ jest ona w przypadku GCC zbędna.