Zawsze można zrobić tak.
#include <iostream>
int main() {
unsigned sum = 0;
unsigned inputNumber;
while (std::cin >> inputNumber) {
sum += inputNumber;
}
std::cout << sum << '\n';
}
Działa to w ten sposób, że podajesz na wejściu liczby (rozdzielasz białymi znakami, czyli np. znakami nowej linii). Gdy uznasz, że wprowadziłaś wszystkie potrzebne liczby, stosujesz skrót klawiszowy, który rejestruje EOF. Na Linuksie i innych systemach bazujących na Uniksie będzie to Ctrl+D, na Windowsie - Ctrl+Z. Dla przykładu podam output z mojej konsoli (Linux).
eryk@mint-t430s:/tmp$ ./program
1
2
3
4
5
15
Pierwsze 5 linijek, które podaję po wywołaniu programu to wejście, ostatnia to wyjście (czyli suma).
Dzięki zastosowaniu takiego podejścia, mogę zapisać dane wejściowe do pliku i wygodnie przekierować zawartość tego pliku na strumień wejściowy programu. Dla przykładu, to jest zawartość pliku dane.txt:
1
2
3
4
5
6
7
8
9
10
Teraz uruchomię mój program (istotne jest, żeby zrobić to z konsoli. Na Windowsie jest to program cmd). Dzięki przekierowaniu strumienia wejściowego, nie muszę tym razem podawać danych, staje się to zautomatyzowane.
eryk@mint-t430s:/tmp$ ./program < dane.txt
55
Zdaję sobie jednak sprawę, że tworząc prosty program dla użytkownika, wygodniej będzie kazać mu wprowadzić jakąś literkę lub tekst, który spowoduje zakończenie wpisywania liczb. Wtedy możesz posłużyć się innym rozwiązaniem. Ale jeśli potrzebujesz wczytywać w ten sposób liczby na potrzeby rozwiązania jakiegoś algorytmicznego zadania, które będzie testowane automatycznie przez sędziego (np. w serwisie SPOJ), to ten sposób będzie odpowiedni.
Pozdrawiam.