Im trying to get the smallest number out of a series of user generated numbers.
i can correctly get the largest number but i always get the negative 99 for the smallest.
im working out of a c++ book that does not provide solutions, i tried to catch the -99 but it didn't work
as you can see i commented it out.

i know someone is going to suggest it (dont use a neg number or try an array)
but the challenge says to do it WITHOUT using arrays and i HAVE to use -99 to quit.

any suggestions

int main()
    int counter, input, largest = 0, smallest = 0;

 cout << "Please enter a series of numbers so i can find the largest and smallest." << endl;
 cout << "Enter -99 to indicate you are done entering numbers." << endl;


        cout << "number: ";
        cin >> input;

//        if (input == -99)
//        {
//            input = 0;
//        }


        if (input < smallest)

            smallest = input;

        if (input > largest )
            largest = input;

   } while (input != -99);

    //always gives -99
    cout << "After searching the smallest is: " << smallest << endl;
    // correct largest
    cout << "After searching largest is: " << largest << endl;

    return 0;
Salem commented: Persistent cross-poster -> -4

That would mean you should be searching for numbers that have nothing to do with -99, and when you want to quit the application -99 then becomes important. Your code looks like you are a C++ beginner, and I think you don't rest too much in a simple question, I would bet you are best to find your own way, and I would provide these most helpful references, please do become a better programmer. For our and your own sake.

Firstly, whatever compiler you're using seems to include <iostream> without you asking it to, and also ignores namespaces. You should get a better compiler. There are many free options.

As for why the smallest comes out to -99 every time; it's because the smallest number you enter is -99 (here's an experiment - try entering one of the number as something even lower, like -100). The check for when to exit the loop happens after running through the loop.

Do not also forget to test values where largest is less than -99.

First of all, is this the cropped version of the code, or you didn't include <iostream> header and the std namespace? You'll need to include this in order for cout, cin and endl to work properly.

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

And in your do-while loop, when you enter a value, let's say -1, the number -1 is assigned to variable "smallest". And in second round of the loop, you enter -99. Now -99 will be assigned to variable "smallest", before the do-while loop terminates. That's why the final value of variable "smallest" is always -99.

Of course, your way of "catching" the -99 is not going to work, cause whenever you enter -99, input's value will be changed to 0, thus the do-while loop's not going to stop.

One of the ways to solve this problem is, you can change the do-while loop to a infinite while loop, and when -99 is entered, use the "break" keyword to terminate the infinite while loop.



     if(some_value == 1) break;
     else { 

              // blabla something something



You are on the right track but you don't want to change what input is with your if statement. If you change line 21 to break; it should do what you want it to do.