Chciałbym jeszcze dopisać małe uzupełnienie. W twoim [pierwotnym] kodzie jest jeszcze mała, niewidoczna wada. Ale najpierw jeszcze jeden pomysł na AC tamtym twoim kodem.
Wystarczy tylko dodać dwie magiczne ukośne kreseczki "//" w odpowiednim miejscu, czyli zakomentować, lub wprost usunąć jedną linijkę. Oczywiście domyślasz się, że chodzi o:
// scanf("%hd");
Jednak taki kod ma tą samą wadę co pierwotny, ale jeszcze bardziej "rozbuchaną" i w jeszcze większym stopniu [jeżeli jest to możliwe]. Dodatkowo, dla specyficznych testów, specjalnie-wrednie przygotowanych, być może, może nawet dawać błędne wyniki.
Dlaczego stosujesz konstrukcję:
if (operation == '-') .....
else if (operation == '+') ...
zamiast:
if (operation == '-') .....
else { ........
Dlatego, że zmienna operation, może od czasu do czasu zawierać także "śmieci" [czyli ta zmienna powinna się tak naprawdę nazywać operationORgarbage ]
Czy da się to jakoś naprawić/poprawić? Oczywiście, że można. Np.: Należy wczytywać operację jako string [o długości jednego znaku], czyli nie getchar[_unlocked]. A takie wredne testy to np:
+
-1
+
+2
itd
PS
Jeżeli ktoś uczy się C++ + OOP, może napisać mały template klasy stos dla wartości różnych typów [char, int, long long, string itd] i dwie metody - operatory + - działające w tej klasie.