The reason is because the last if statement doesn't have a good scope. Right now, it would only check it in this way:
Notice the '!' being only applied to your first condition, i.e. the op=="add" condition. Now seeing as that can be true when op is not equal to "add", you are also expecting op to be equal to "sub","mult", and "div" all at the same time which will never happen. So it will never be true.
Next time, when you make long && conditions like this, it'd be better to have it in this format IMO.
The compiler might check the conditions differently otherwise, and it may end up having weird issues. I may be wrong about this though.However, in my opinion using an else if would be much of a greater help since you'd be able to turn the last conditional to an else instead, removing any need for a condition that looks like that in this case at least.
As for the question in the first post,
Posting the code of your prompt message should enable us to help you determine your problem with it. (It's just a comment saying that there's some form of prompt message there atm) Is it a nested loop? or is it simply a cout and a cin?
Hope that this helps and that we can help you further if you are still experiencing this problem.
Edit: I noticed that you redeclare your variables every time the loop loops. I would suggest putting the declaration outside of the loop, and instead only reinitializing them inside the loop. As for why, the issue is scope, and in this case. You're better off just declaring them outside of the do-while loop.