2016-05-08 1 views
-1

Я вызываю функцию what() в классе исключения из блока catch, но в функции what() печатает значение мусора так как ему не назначено какое-либо значение вместо него, нужно распечатать значение, выведенное из функции checkusername(), но это не делает, пожалуйста, помогите мне. вот кодвызов функции в классе исключений из блока catch не печатает значение, которое передается из блока try

#include <iostream> 
#include <string> 
#include <sstream> 
#include <exception> 
using namespace std; 
class BadLengthException 
{ 
public: 
int n1; 
BadLengthException(int n) 
{ 
    n1=n; 
    } 
int what() 
    { 
    cout << n1; 
    } 
}; 
bool checkUsername(string username) { 
bool isValid = true; 
int n = username.length(); 
if(n < 5) { 
    throw BadLengthException(n); 
} 
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; 
} 

ответ

0

what не имеет return заявления, и, следовательно, вызывает неопределенное поведение. Я ожидаю, что вы имели бы return n1 вместо cout << n1.

Смежные вопросы