November 12, 2012

Unnecessary comparisons

char numberToLetterGrade(int a){
	if (a <=100 && a >= 90) {
		return 'A';
	}else if (a<=89 && a>=79){
		return 'B';
	}else if (a<=78 && a>=70){
		return 'C';
	}else if (a<70){
		return 'F';
	}else{
		return 'X';
	}
}
char numberToLetterGrade(int a)
{
	if (a > 100) {
		return 'X';
	}

	if (a >= 90) {
		return 'A';
	}

	if (a >= 79) {
		return 'B';
	}

	if (a >= 70) {
		return 'C';
	}

	return 'F';
}

Return immediately after successful input.

string restaurantList::getInput(){ //gets an input with some error checking
	//string value;
	char value[50];
	string toReturn = "";
	int tries = 0;
	bool good_input = false;
	do{
		cin.getline(value, 50, '\n');
		//cout << "\nvalue: '" << value << "'\n";
		if (value[0] == '\0'){ //Someties there are newline characters from the previous input (entering a selection and pressing return).  This ignores that.
			//cout << "\ndetected null character, retrying...\n";
			cin.getline(value, 50, '\n');
		}

		if(!cin){
			cout << "Invalid input, try again!\n>> ";
			++tries;
		}
		else{
			good_input = true;
		}
	}while(tries < 3 && !good_input);
	if (!good_input){
		cout << "Invalid input, returning empty string...\n";
	}
	else{
		toReturn = value; //cast the char array to a proper string and return it
	}
	return toReturn;
}
string restaurantList::getInput() const
{
	string value;
	int tries = 0;

	do {
		cout << ">> ";
		getline(cin, value);
		if (cin) {
			return value;
		}
		cerr << "Invalid input, try again!\n";
	} while(++tries < 3);

	cerr << "Invalid input, returning empty string...\n";
	return "";
}

Write a loop

int main()
{
	//Construct rectangles with a name and dimensions:
	rectangle wall(12, 10);
	rectangle square(8, 8);
	rectangle door(7, 3);
	rectangle window(4, 3);
	rectangle table(3, 2);
	rectangle billboard(11, 8);

	cout << "--------------------------------------------\n"
		<< "The area of the wall is " << wall.area()
		<< " square units.\nThe perimeter of the wall is "
		<< wall.perimiter() << " units.\nThe diagonal of the wall is "
		<< wall.diagonal() << "units.\n" 
		<< "--------------------------------------------\n"
		<< "The area of the square is " << square.area()
		<< " square units.\nThe perimeter of the square is "
		<< square.perimiter() << " units.\nThe diagonal of the square is "
		<< square.diagonal() << "units.\n" 
		<< "--------------------------------------------\n"
		<< "The area of the door is " << door.area()
		<< " square units.\nThe perimeter of the door is "
		<< door.perimiter() << " units.\nThe diagonal of the door is "
		<< door.diagonal() << "units.\n" 
		<< "--------------------------------------------\n"
		<< "The area of the window is " << window.area()
		<< " square units.\nThe perimeter of the window is "
		<< window.perimiter() << " units.\nThe diagonal of the window is "
		<< window.diagonal() << "units.\n" 
		<< "--------------------------------------------\n"
		<< "The area of the table is " << table.area()
		<< " square units.\nThe perimeter of the table is "
		<< table.perimiter() << " units.\nThe diagonal of the table is "
		<< table.diagonal() << "units.\n" 
		<< "--------------------------------------------\n"
		<< "The area of the billboard is " << billboard.area()
		<< " square units.\nThe perimeter of the billboard is "
		<< billboard.perimiter() << " units.\nThe diagonal of the billboard is "
		<< billboard.diagonal() << "units.\n";

	return EXIT_SUCCESS;
}
	

An array of structures:

struct thing {
	string name;
	rectangle rect;
};

int main()
{
	const thing a[] = {
		{"wall",      rectangle(12, 10)},
		{"square",    rectangle( 8,  8)},
		{"door",      rectangle( 7,  3)},
		{"window",    rectangle( 4,  3)},
		{"table",     rectangle( 3,  2)},
		{"billboard", rectangle(11,  8)}
	};
	const size_t n = sizeof a / sizeof a[0];

	for (const thing *p = a; p < a + n; ++p) {
		cout << "--------------------------------------------\n"
			<< "The area of the " << p->name << "  is " << p->rect.area()
			<< " square units.\n"
			"The perimeter of the " << p->name << " is "
			<< p->rect.perimiter() << " units.\n"
			<< "The diagonal of the " << p->name << " is " << p->rect.diagonal() << "units.\n";
	}

	return EXIT_SUCCESS;
}