SirMcSourTowel
SirMcSourTowel

Reputation: 21

Finding the minumum value out of user inputs in C++

My problem is finding the minimum value out of user defined number of inputs. Everything so far works just fine, except that. Every time I try and rearrange some code or try a new method, I keep getting the same output on the screen:

Sum of numbers entered is:      145.4
Average of numbers entered is:  24.2333
The Highest number entered was: 45
The Lowest number entered was:  6.95283e-310

I get this every single time, regardless of what is entered, or what different suggestion I try:

The Lowest number entered was:  6.95283e-310

I am aware of the use and implementation of Arrays. However, the assignment I'm doing hasn't even covered arrays yet. That is some number of chapters later. Please don't suggest arrays...

I've looked here:

Finding Maximum and Minimum values in c++ by user input Didn't work

http://www.cplusplus.com/forum/beginner/38799/ Didn't work

changing the values of max/min didn't work either

#include <iostream>
using namespace std;

int main() 
{

    double number, numberitems, sum = 0, average, max, min;

    cout << "Enter number of items: \n";
    cin >> numberitems;

    //Make sure user can not enter negatives
    if ( numberitems < 0 ) {
        //no request to perform sum
        std::cout << "I said not to enter a negative number... '\n";
        std::cin.clear(); //clear bad input flag
        return 1;
    }

    //Get the user's values
    for (int i = 0; i < numberitems; i++)
    {
        std::cout << "Enter any NON-negative number: ";
        std::cin >> number; 
        std::cout << '\n';


        //Maximum value entered
        if (number > max) {
            max = number;
        }

        //minimum value entered
        if (number < min) {
            min = number;
        }

        //Make sure user can not enter negatives
        if ( number < 0 ) {
            //no request to perform sum
            std::cout << "I said not to enter a negative number... '\n";
            std::cin.clear(); //clear bad input flag
            return 1;
        }

        //Sum of all the numbers
        sum = sum + number;

        //Average of all the numbers
        average = sum / numberitems;


    }
    std::cout << endl;
    std::cout << endl;
    std::cout << "Sum of numbers entered is:      " << sum << '\n';
    std::cout << "Average of numbers entered is:  " << average <<'\n';
    std::cout << "The Highest number entered was: " << max <<'\n';
    std::cout << "The Lowest number entered was:  " << min <<'\n';
    return 0;
}

Made a temporary fix :3

    double min = 99999999999999999999999999999999999999999999999;

I'm very new to this.

Updated

After reading more comments I saw I was missing <cfloat>. Using #include <cfloat> NOW everyone's suggestions above work. However, <cfloat> was not covered in class, at all. So I'm not sure if that is usable here?

#include <iostream>
#include <cfloat>
using namespace std;

int main()
{

    int numberitems;
    double number, sum = 0, average;
    double max = 0;
    double min = DBL_MAX;

    cout << "Enter number of items: \n";
    cin >> numberitems;

    //Make sure user can not enter negatives
    if ( numberitems < 0 ) {
        //no request to perform sum
        std::cout << "I said not to enter a negative number... '\n";
        std::cin.clear(); //clear bad input flag
        return 1;
    }

    //Get the user's values
    for (int i = 0; i < numberitems; i++)
    {
        std::cout << "Enter any NON-negative number: ";
        std::cin >> number;
        std::cout << '\n';


       //Maximum value entered
      if (number >= max) {
            max = number;
          }

       //minimum value entered
       if (number <= min) {
            min = number;
        }

       //Make sure user can not enter negatives
       if ( number < 0 ) {
            std::cout << "I said not to enter a negative number...'\n";
            std::cin.clear(); //clear bad input flag
            return 1;
        }

       //Sum of all the numbers
       sum = sum + number;

       //Average of all the numbers
       average = sum / numberitems;

    }

    //Print the results
    // some cosmetic...
    std::cout << endl;
    std::cout << endl;
    std::cout << "\n=================REPORT====================\n";
    std::cout << '\n';
    std::cout << "\tYour Totals\tValues\n";
    std::cout << "\t-----------\t------\n";

    std::cout << "\t    Sum:        " << sum << '\n';
    std::cout << "\t  Average:      " << average <<'\n';
    std::cout << "\t  Highest:      " << max <<'\n';
    std::cout << "\t   Lowest:      " << min <<'\n';
    return 0;
}

Again, <cfloat> works fine, but I'm not sure if I'm allowed to use it. What other ways around this are there?

Upvotes: 0

Views: 2172

Answers (3)

anatolyg
anatolyg

Reputation: 28271

When calculating minimum and maximum, you should initialize your variables to a default value. For minimum, it's the maximal possible value; for maximum - the minimal possible one.

double max, min; // BUG - not initialized
#include <float.h> // or <cfloat>
...
double max = 0; // CORRECT - initialized
double min = DBL_MAX; // CORRECT - initialized

For maximum, the initialization is usually -DBL_MAX (note: not DBL_MIN), but 0 is good enough in this case, when no negative values exist.

Upvotes: 2

Amir Kirsh
Amir Kirsh

Reputation: 13760

The question already got good answers - shortly: min and max are uninitialized.

However

Above is very specific. Of course it helps in this specific case but I feel a broader advise that would work here and in many other cases is needed.

Add printouts

Adding debug printouts to your code ("debugging without a debugger") is always helpful in such cases.

For example adding the following in your example may help:

//Get the user's values
for (int i = 0; i < numberitems; i++)
{
    std::cout << "Enter any NON-negative number: ";
    std::cin >> number; 
    std::cout << '\n';


    //Maximum value entered
    if (number > max) {
        // debug - (remove before submission)
        std::cout << "number is the new max! number = " << number
                  << ", max = " << max << std::endl;
        // end of debug
        max = number;
    }

    //minimum value entered
    if (number < min) {
        // (debug - remove before submission)
        std::cout << "number is the new min! number = " << number 
                  << ", min = " << min << std::endl;
        // end of debug
        min = number;
    }

Upvotes: 2

Pierce Griffiths
Pierce Griffiths

Reputation: 753

You need to set an initial value for min and max. For min, I'd suggest using an initial value of DBL_MAX, which is defined in the header cfloat.

Upvotes: 0

Related Questions