cin >> num возвращает false, поэтому тело вашего цикла не выполняется вообще.
Если вам действительно нужно использовать execption
while(true)
{
cin >> num;
try{
if(cin.fail()){
throw "error";
}
if(num>0){
cout<<"number greater than 0"<<endl;
}
}
catch( char* error){
cout<<error<<endl;
break;
}
}
Лучше поставить ловушку за пределами цикла, чтобы получить лучшую производительность