Your first problem is because of your while statement condition here...
cpp
while (number != 1 || number != 2)
This is saying if the number is not 1 OR the number is not 2. If you type in 1, then number != 2 right? So the whole statement becomes true. If you type in 2, then number != 1 right? So the whole thing is true. I think you mean to use And which is &&. If number != 1 and number != 2, continue the loop.
Your second problem doesn't always show zero, it just doesn't correctly record the second highest number. Of course this may depend on the input you give it why it is showing zero, but what you need to do is when you go to set the largest number the first time, also set the value of next to the same number. So after your first number both largest and next will be the same value.
This makes sense doesn't it? Your highest and second highest values are the same values because you have only put in one number. Now ideally what you could have done is that whenever you find a value that is higher than the largest put the largest into next first and then set largest to the new number.
But either way works.
Enjoy!
"At DIC we be the largest and next largest code ninjas... now just how large we are not going to say, but lets just say we could be on the show 'The biggest loser'."