Bo stringi nie porównuje się operatorem "==" porównania, ten operator sprawdza referencje- adres w pamięci, czyli tam gdzie jest zapisany obiekt, a nie to czy jest on równy - jako literał.
Stąd dwa różne obiekty jako string mające ten sam literał, mają inny adres w pamięci
do porównania stringów służy "compare np"
https://www.cplusplus.com/reference/string/string/compare/
They compare equal -> jeśli są równe zwrócone zostanie 0 ... dlaczego u Ciebie nie zadziała? Bo takie porównanie jak niżej zwróci zero, a if (0) -> oznacza false
if(odpowiedz.compare(poprawna))
i o ile kod jest poprawny to zadziała, w wyżej opisany sposób dla równych znaków zwraca wartości całkowite opisane w dokumentacji tutaj dla równych 0, dlatego wrzuć jak wyglądają twoje zmienne :), i wrzuć resztę kodu programu
więc należy to zapisać, zapisując w ten sposób jeśli są równe-> będą zwracać 0 więc warunek 0 == 0 jest prawdziwy
a samo if(0) jest fałszem, bo 0 -> jako boolean to fałsz
if(odpowiedz.compare(poprawna) ==0 )
Pamiętaj że wczytując znaki- nie wczytujesz stringa, a CHAR stąd to nie jest to samo