1: //draw_boxes.cpp 2: //Prompts the user to enter a punctuation character and 3: //then uses that character to draw a 4 by 4 "empty" box. 4: //The box is preceded and followed by a blank line, and centered 5: //between the left/right margins of a typical 80-column display. 6: //If the user does not enter a punctuation character, the program 7: //displays an error message, does not attempt to draw a box, 8: //and asks the user to try again. The program terminates when 9: //the user enters the end-of-file character in response to the 10: //request to enter a character for the box border. 13: #include <iostream> 14: #include <iomanip> 15: #include <cctype> 16: using namespace std; 18: void DescribeProgram(); 19: void GetCharFromUser(char& ch, bool& charOK, bool& timeToQuit); 20: void DrawBox(char borderChar); 23: int main() 24: { 25: DescribeProgram(); 27: char borderChar; 28: bool borderCharOK; 29: bool timeToQuit; 31: GetCharFromUser(borderChar, borderCharOK, timeToQuit); 32: while (!timeToQuit) 33: { 34: if (borderCharOK) 35: DrawBox(borderChar); 36: else 37: cout << "Error: Character input was " 38: "not punctuation. Try again ...\n"; 39: GetCharFromUser(borderChar, borderCharOK, timeToQuit); 40: } 41: cout << endl; 42: } 44: void DescribeProgram() 45: //Pre: The cursor is at the left margin. 46: //Post: The program description has been displayed, 47: // preceded and followed by at least one blank line. 48: { 49: cout << "\nThis program draws a 4-character by 4-character \"empty\" " 50: "box. It uses a\ncharacter input by the user, and centers the " 51: "box between the left/right\nmargins on a typical 80-column " 52: "display.\n\n"; 53: } 56: void GetCharFromUser(/* out */ char& ch, 57: /* out */ bool& chOK, 58: /* out */ bool& timeToQuit) 59: //Pre: None 60: //Post: ch contains the character entered by the user 61: // Value of chOK is 62: // - true if ch contains a punctuation character 63: // - false otherwise 64: // Value of timeToQuit is 65: // - true if user has entered the end-of-file character 66: // - false otherwise 67: { 68: cout << "\nEnter a punctuation character here " 69: "(or end-of-file to quit): "; 70: cin >> ch; 71: timeToQuit = !cin; 72: if (!timeToQuit) 73: { 74: cout << endl; 75: chOK = (ispunct(ch) != 0); 76: } 77: } 80: void DrawBox(/* in */ char borderChar) 81: //Pre: borderChar has been initialized. 82: //Post: A 4 x 4 "empty" box has been displayed, 83: // using the character in borderChar. 84: { 85: cout << endl; 86: cout << setw(38) << "" 87: << borderChar << borderChar << borderChar << borderChar << endl 88: << setw(38) << "" 89: << borderChar << " " << borderChar << endl 90: << setw(38) << "" 91: << borderChar << " " << borderChar << endl 92: << setw(38) << "" 93: << borderChar << borderChar << borderChar << borderChar << endl; 94: cout << endl; 95: }