#include <iostream>
#include <cstdlib>
#include <string>
#include <limits>
using namespace std;

struct hurricane {
        string name;
        int windspeed;
};

int category(const hurricane *p);

int main()
{
    string name_in;
    int windspeed_in;

    // get hurricane name from user
    cout << "Enter a hurricane name: ";
    cin >> name_in;

    // get hurricane windspeed from user
    while (true) {
        cout << "Enter the hurricane's windspeed (in mph) as an integer: ";
        
        cin >> windspeed_in;
        if (cin.fail()) {
            cin.clear(); // clear fail state
            cin.ignore(numeric_limits<streamsize>::max(), '\n'); // erase input buffer
            cout << "Invalid input.  Please try again." << endl;
        }
        else    
            if (windspeed_in >= 74)
                break;
            else
                cout << "Windspeed must be an integer greater than or equal to 74." << endl;
    }

    hurricane h {name_in, windspeed_in};

    // output hurricane's Saffir-Simpson category
    cout << name_in << " is a category " << category(&h) << " hurricane on the Saffir-Simpson scale." << endl;
    
    return EXIT_SUCCESS;
}

/*
int category(const hurricane *p) { // calculates the category of the hurricane (assumes wind is >= 74)
    int windspeed = p->windspeed;
    int cat;
    if (p->windspeed < 74)
        cout << p->name;
    else if ((p->windspeed >= 74) && (p->windspeed <= 95))
            cat = 1;
    else if ((p->windspeed >= 96) && (p->windspeed <= 110))
            cat = 2;
    else if ((p->windspeed >= 111) && (p->windspeed <= 129))
            cat = 3;
    else if ((p->windspeed >= 130) && (p->windspeed <= 156))
            cat = 4;
    else if (p->windspeed > 156)
            cat = 5;

    return cat;
}
*/

//Calculate the category of the hurricane.
//Return 0 if windspeed is less than 74.

int category(const hurricane *p)
{
	const int a[] {
		 73,   //category 0
		 95,   //category 1
		110,   //category 2
		129,   //category 3
		156    //category 4
	};
	const size_t n {size(a)};   //the number of elements in the array

	for (int cat {0}; cat < n; ++cat) {
		if (p->windspeed <= a[cat]) {
			return cat;
		}
	}	

	return n; //Arrive here if p->windspeed greater than categories in array
}