From 22264b03bce6d6798dd5adede765957b794eb6ef Mon Sep 17 00:00:00 2001 From: Brian Maloney <106637020+5ycm@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:57:00 -0700 Subject: [PATCH] Fixed bug in readArray Fixed failed cin buffer state in readArray. cin.clear() and cin.ignore() Flush the cin buffer after non-integers are received as input. --- programming-I/12-deleteRepeats/deleteRepeats.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/programming-I/12-deleteRepeats/deleteRepeats.cpp b/programming-I/12-deleteRepeats/deleteRepeats.cpp index bf26eb1..8e9e20a 100644 --- a/programming-I/12-deleteRepeats/deleteRepeats.cpp +++ b/programming-I/12-deleteRepeats/deleteRepeats.cpp @@ -47,19 +47,25 @@ void readArray(char array[], int &size) { cout << "\nWhat is the size: "; cin >> size; - while (size > SIZE_LIMIT || size < 0) { - cerr << "\nInvalid size. Please enter a size between 0 and " << SIZE_LIMIT; + while (size > SIZE_LIMIT || size < 0 || !cin ) { //!cin checks for a failed state, or in other words, when a non-int type is given as 'size'. + cin.clear(); // restores cin back to normal state + cin.ignore(1024, '\n'); // this clears out the cin buffer. + + cout << "\nInvalid size. Please enter a size between 0 and " << SIZE_LIMIT; cout << "\n\nWhat is the size: "; cin >> size; } + cout << "Enter the array (one character at a time): " << endl; - for (int i = 0; i < size; i++) + for (int i = 0; i < size; i++){ cin >> array[i]; + } } + //***************************************************************************************************** void deleteRepeats(char array[], int &size) { @@ -196,4 +202,4 @@ Updated array: 1 2 3 Repeat? (y/n): n -*/ \ No newline at end of file +*/