Skoro już poradziłeś sobie z rozwiązaniem zadania, to można teraz przeanalizować czemu debugger pokazywał, że liczby zamieniały się miejscami.
A więc przy tym teście:
-0.5 -0.5 0
z uwagi na to, że zmienna 'x' była zdeklarowana jako int, to strumień wczytywał to co było przed znakiem '.', czyli '-0'. Potem resztę próbował wczytać do zmiennych double a,b,c - więc do zmiennej 'a' poszło '.5' co zostało zinterpretowane jako 0.5, a pozostałe dwie zmienne zostały odczytane poprawnie.
Teraz łatwo możesz zrozumieć dlaczego prawdziwe cyrki się działy przy próbach wczytania testu złożonego z liczb całkowitych, np. 1 2 1 .
Na przyszłość warto poczytać trochę o strumieniach w c++ i pracy z debuggerem.
A samo wczytywanie testów można też zrealizować tak:
while(cin>>a>>b>>c)
lub za każdym przebiegiem pętli samemu sprawdzać flagę EOF strumienia.