visual c++ - c++ Sum, Average, Largest, Smallest validation issue -


so program calculates , prints largest, smallest, average, , sum of sequence user enters. problem have found when symbol entered, outputs wrong, still ""adds" it's ascii code sum, messing results. also, if else number , letter such 1361351p, still reads it. appreciated.

/** c2.cpp       * test #2 problem c2       * robert uhde       * program calculates , prints largest, smallest, average,        * , sum of sequence of numbers user enters.       */ #include <iostream> using namespace std;  // extreme constants find min/max const double max = 1.7976931348623157e+308; const double min = 2.2250738585072014e-308;   // create generic variable t prototype template <class t> // prototype dataset request inputs , calculate sum, average, largest , smallest numbers. t dataset(t &sum, t &largest, t &smallest, t avg);  int main(){     // intro program     cout << "this program calculates , prints largest, smallest,"          << endl << "average, , sum of sequence of numbers user enters." << endl << endl;     // defined used variables in longest double format include many types possible largest range     double avg = 0, sum = 0, max, min;     // call dataset returns avg , return references     avg = dataset(sum, max, min, avg);     // output 4 variables     cout << endl << "the largest of sequence entered is: " << max << endl;     cout << "the smallest of sequence entered is: " << min << endl;     cout << "the sum of sequence entered is: " << sum << endl;     cout << "the average of sequence entered is: " << avg << endl;     system("pause");     return 0; }  // create generic variable t dataset template <class t> t dataset(t &sum, t &max, t &min, t avg){     t num;     min = max, max = min;     // count number of valid numbers     int count = 0;     // repeat loop until ^z     do{         cout << "enter sequence of numbers: (^z quit) ";         cin >> num;         // if valid, increment count 1, add sum, find out if it's new max or min         if(cin.good() && (typeid(num) == typeid(int) || typeid(num) == typeid(double))){             count++;             if(num > max)                 max = num;             sum += num;             if(num < min)                 min = num;         }         // if user enters ^z break out         else if(cin.eof())             break;         // if there sort of type error, print , clear request again         else{             cout << "error. try again.\n";             cin.clear();             cin.ignore(80, '\n');         }     }while(true);      // calculate average , return     avg = sum / count;     return avg; } 

your conditioning check needs more work. use more specific condition checkings such isalpha or isdigit part of since these condition checks below not enough

    if(cin.good() && (typeid(num) == typeid(int) || typeid(num) == typeid(double))) 

best of luck!


Comments