Tom Kelliher, CS17
Apr. 26, 1996
See previous examples
Entering a list of ages and using a negative age to indicate ``end of input'':
cout << "Enter an age: " cin >> inputAge; while (inputAge >= 0) { // Do something with the age. cout << "Enter an age: " cin >> inputAge; }
Note the redundancy. Better expressed through a posttest structure:
do { cout << "Enter an age: " cin >> inputAge; // Do something with the age. } while (inputAge >= 0);
Suppose the first age is itself negative? (Unlikely in this case.) The ``best'' solution:
while (1) { cout << "Enter an age: " cin >> inputAge; if (inputAge < 0) break; // Do something with the age. }Midtest repetition?
Not used very often.
Example: rejecting invalid inputs.
#include <iostream.h> #include <iomanip.h> double computeAverage(int number); int main() { int n; do { cout << "Enter the number of scores: "; cin >> n; } while (n < 1); cout << "\nThe average score is " << setprecision(1) << setiosflags(ios::fixed) << computeAverage(n) << ".\n"; cout << "\nThe bill is in the mail.\n"; return 0; } double computeAverage(int number) // Why return double? { int sum = 0; int score; int i; // Note comma operator in loop initializer. // The form of this differs from a similar example in the text. for (sum = 0, i = 0; i < number; ++i) { cout << "Enter score " << i << ": "; cin >> score; if (score < 0) { cout << "Score must be non-negative! Score discarded.\n"; // Why is this decrement necessary? --i; continue; // Skip to next iteration. } sum += score; } return sum / number; // Will this return a double? }
What is printed by:
int i, j; for (i = 0; i < 3; ++i) for (j = 0; j < 4; ++j) cout << j << endl;
What is printed by:
int i, j; for (i = 0; i < 3; ++i) for (j = 0; j < 4; ++j) cout << setw(8) << i << setw(8) << j << endl;
Arrays and sorting.
An array of 5 ints:
int i; // Loop counter. int temp; // Temporary storage. int sorted; // Flag variable. int data[5]; // Array of 5 ints. for (i = 0; i < 5; i++) { cout << "? "; cin >> data[i]; }Sorting the five numbers:
sorted = 0; // Set to 0 so that we get into the loop. while (!sorted) { sorted = 1; for (i = 0; i < 4; ++i) if (data[i] > data[i + 1] { sorted = 0; temp = data[i]; data[i] = data[i + 1]; data[i + 1] = temp; } }