The only problem Im having is that my program always displays "Unmatched grouping symbols". I know its in my main program in my while loop. I just cant figure out what's causing it. I've tried to use the Debugger but I dont understand what too look for.

Code:
#include <iostream>
using namespace std;

const int DefaultListSize = 50;
typedef char Elem;

class Astack 
{
private:
	int top;	/*Index for top element*/
	int size;	/*Maximum size of stack*/
	Elem*listArray;	/*Array holding stack elements*/
public:	
		Astack(int sz =DefaultListSize)	/*Constructor*/
		{size = sz; top = 0; listArray = new Elem[sz];}
		~Astack() { delete [] listArray;}	/*Destructor*/
		void clear() {top = 0;}
		bool push(const Elem& item){
			if(top == size) return false;	/* Stack is full*/
			else {listArray [top++] = item;
				return true;
			}
		}
		bool pop(Elem& item){	/*Pop top element*/
			if(top == 0) return false;
			else {item = listArray[--top]; 
				return true;
			}
		}
		bool topValue(Elem& item) const {	/*Return top element*/
			if (top == 0) return false;
			else {item = listArray[top - 1];
			return true;
			}
		}
		int length() const {return top;}
		bool IsEmpty() const {if(top == 0) return true;
		else return false;
		}
	};

	bool Opener(char ch){
	 if((ch == '(') || (ch =='[') || (ch =='{'))
		return true;
	else 
		return false;
	}/*end of opener*/

	bool Match(char Lc, char Rc){
		if(( Lc == '(') && (Rc == ')') || ((Lc == '[') && (Rc == ']')) ||((Lc == '{') && (Rc == ']')))
			return true;
		else
			return false;
	}/*end of Match*/

	bool Closer(char ch){
		if((ch == ')') || (ch == ']') || (ch == '}'))
			return true;
		else
			return false;
	}/*end of closer*/

int main(){
	
	Astack S;
	char s;

cout <<"Enter data:";
cin >> s;

if(Opener(s)){ 
	S.push (s);
	}
else
	cin.ignore(s);

if(Closer(s)){
	S.pop(s);
}

while(S.pop(s)){
	if(Match(Opener(s), Closer(s)))
		cout << "Grouping symbols used properly";
	
	else 
		cout << "Unmatched grouping symbols";
}

}