#include<iostream>
#include<string>

/* Try:
-1
-2
3
4
5
-6
6
-7
-7
7
-8
-8
8
-9
-9
-9
9
Kevin
*/

using namespace std;

int main() {

cout << "Bad input:" << endl;

// This example builds on the bad input example at
// end of the previous chapter.
//
// First let's try values that are out of range.
int favorite_number = 0;

cout << "As you have seen in the reading an \"if\"" << endl;
cout << "statement gives you a way to check for a condition:"  << endl;
cout << "Please give me your favorite non-negative number: (give me a negative number to test me) " ;
cin >> favorite_number;
cout << endl;
if (favorite_number < 0) cout << favorite_number << " is negative and therefore bad input" << endl;

cout << endl;
cout << "We can also have and else part:" << endl;
cout << "Please give me your favorite non-negative number: (give me a negative number to test me) " ;
cin >> favorite_number;
cout << endl;
if (favorite_number < 0) cout << favorite_number << " is negative and therefore bad input" << endl;
else cout << favorite_number << " is good input!" << endl;

cout << endl;
cout << "Test the other side of the same if-else statement:" << endl;
cin >> favorite_number;
cout << endl;
if (favorite_number < 0) cout << favorite_number << " is negative and therefore bad input" << endl;
else cout << favorite_number << " is good input!" << endl;

cout << endl;
cout << "We could also exit the program on bad input:" << endl;
cout << "Please give me your favorite non-negative number: (give me a negative number to test me (exits)) ";
cin >> favorite_number;
cout << endl;
// WARNING: STUPID CODE USED TO MAKE A POINT. DO NOT USE THIS!
if (favorite_number < 0) cout << favorite_number << " is negative and therefore bad input." << endl;
if (favorite_number < 0) cout << "Exiting..." << endl;
if (favorite_number < 0) return 0;
else cout << favorite_number << " is good input!" << endl;

cout << endl;
cout << "Also from the reading c++ lets us group code with {}" << endl;
cout << "Please give me your favorite non-negative number: (give me a negative number to test me (exits)) ";
cin >> favorite_number;
cout << endl;
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input." << endl;
cout << "Exiting..." << endl;
return 0;
}
else {
cout << favorite_number << " is good input!" << endl;
}

// Note the style used above.

cout << endl;
cout << "We can now responde more gracefully to bad input more gracefully and ask again:" << endl;
cout << endl;

cout << "Please give me your favorite non-negative number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input, try again." << endl;
cin >> favorite_number;
cout << endl;
}
cout << "Your favorite number is " << favorite_number << endl;
// FYI you only need that much for your lab

cout << endl;
cout << "What about the bad input the second time? We could:" << endl;
cout << "Please give me your favorite non-negative number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;

// there are better ways to handle this, but notice that we can put groups in groups:

if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input" << endl;
cout << "Please give me your favorite NON-NEGATIVE number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input" << endl;
cin >> favorite_number;
cout << endl;
}
}
cout << "You said your favorite number is " << favorite_number << endl;

cout << endl;
cout << "This is NOT the same as the following, but it has the same effect IN THIS CASE:" << endl;
cout << "Please give me your favorite non-negative number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input" << endl;
cout << "Please give me your favorite NON-NEGATIVE number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;
}
// is it still negative?
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input" << endl;
cin >> favorite_number;
cout << endl;
}
cout << "You said your favorite number is " << favorite_number << endl;

cout << endl;
cout << "What about truely difficult:" << endl;
cout << "Please give me your favorite non-negative number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;

// ALSO STUPID CODE:
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input" << endl;
cout << "Please give me your favorite NON-NEGATIVE number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;
}
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input" << endl;
cout << "Please give me your favorite NON-NEGATIVE number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;
}
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input" << endl;
cout << "Please give me your favorite NON-NEGATIVE number: (give me a negative number to test me) ";
cin >> favorite_number;
cout << endl;
}
if (favorite_number < 0) {
cout << favorite_number << " is negative and therefore bad input" << endl;
cin >> favorite_number;
cout << endl;
}
// ...
cout << "You said your favorite number is " << favorite_number << endl;

// We will have better ways of dealing with this when we do loops next week.

string name = "";

cout << endl;
cout << "We can also do similar things with text:" << endl;
cout << "Please enter an name: (try Kevin or Fred) ";
cin >> name;
cout << endl;

if ((name != "Kevin") && (name != "Fred")){
cout << name << " is a fine name, but Kevin or Fred would have been better." << endl;
cout << "Please enter a name ";
cin >> name;
cout << endl;
}
else {
cout << name << " is a fine name, either Kevin or Fred would have been great choices." << endl;

}
cout << "You entered " << name << endl;

return 0;
}