mercredi 1 février 2017

What is the return value of the given function on encountering an exception?

checkUsername(): checks the username's length, and returns true when length is greater than or equal to 5. Otherwise it returns false. The function checkUsername() should return false on BadLengthException(), but it doesn't seem to appear as none of the code within checkUsername() and BadLengthException::what() returns false. But still program is working fine when it encounters a username of length less than 5. What's going on here? How is the return value passed is false?

        class BadLengthException: public exception{
            public:
                int n;
                BadLengthException(int x) { n=x; };
                virtual int what() throw() {
                    return n;
                }
            };
        /*
    This function checks the username's length, 
and returns true when length is greater than or equal to 5.
 Otherwise it returns false.
    */
        bool checkUsername(string username) {
            bool isValid = true;
            int n = username.length();
            if(n < 5) {
                throw BadLengthException(n);    //the problem
            }
            for(int i = 0; i < n-1; i++) {
                if(username[i] == 'w' && username[i+1] == 'w') {
                    isValid = false;
                }
            }
            return isValid;
        }

        int main() {
            int T; cin >> T;
            while(T--) {
                string username;
                cin >> username;
                try {
                    bool isValid = checkUsername(username);
                    if(isValid) {
                        cout << "Valid" << '\n';
                    } else {
                        cout << "Invalid" << '\n';
                    }
                } catch (BadLengthException e) {
                    cout << "Too short: " << e.what() << '\n';
                }
            }
            return 0;
        }

Aucun commentaire:

Enregistrer un commentaire