Ogólnie rozwiązanie z std::cin
jest w pewnym stopniu problematyczne gdyż, wczytujesz liczby z stdin
(standard input), a standard input ustawiasz w ten sposób, że jak masz twój program np. aplikacja.exe, a plik z danymi txt masz w input.txt, to możesz go z konsoli przekierować na ten stdin tak: aplikacja.exe < input.txt
, to sprawi że nie będziesz musiała wpisywać ręcznie tych danych.
Druga opcja to otwarcie po prostu pliku i czytanie, we wcześniejszym przykładzie po prostu przekierowujesz strumień plik na wejście aplikacji.
Druga sprawa, to robiąc std::cin
wczytujesz liczbę, ale automatycznie pomijasz wszystkie inne znaki np. nową linię, czy pustą linię.
Możesz użyć std::getline(std::cin, line);
żeby wczytać całą linię i sobie w pętli iterować, gdzie line to std::string line
.
Jak już możesz wczytać cały plik to jakoś trzeba zdecydować jak kontrolować przebieg operacji.
std::getline
zwraca wartość, różną od zera to udało się wczytać linię i równe zero jeśli jest koniec pliku, możesz to wykorzystać żeby wiedzieć kiedy już cały plik wczytałaś.
Jak chcesz wynik std::getline
zapisać do zmiennej to musisz zrobić konwersję na boola lub użyć w warunku if / while, żeby przestało wczytywać itp. (gdzie konwersja do boola to możesz !std::getline
dodać po prostu wykrzynik lub dwa, bo po pierwszym zaneguje się wartość logiczna).
Teraz jak pobierzesz linię to np. za pomocą line.size()
możesz sprawdzić ile ma znaków linia, jak jest zero to jest to pusta, a jak więcej to są liczby jakieś, ale zapisane jako tekst, więc wcześniej musisz skonwertować na liczbę text, żeby stringa, czyli tekst zamienić na liczbę możesz użyć std::stoi(line)
skrót od string to integer.
Więc możesz sobie tak wczytywać linia po linii, sumować i jak dojdziesz do pustej linii, to tą sumę możesz sprawdzić czy jest większa od tej w zmiennej maximum jeśli tak to ustawiasz jako nowy najlepszy wynik i skumulowaną sumę znowu zerujesz, bo pusta linia oznacza przejście do kolejnego elfa.
No i biblioteki jakie potrzebujesz to
#include <iostream>
#include <string>