В вашем коде есть некоторые ошибки, я исправил их в приведенном ниже коде и объяснил в виде комментариев:
char answer;
int num, i, count;
do{
cout<<"Enter number:"<<endl;
cin>>num;
if(num>0)
{
count=0;
for(i=2; i<num; i++){
if(num%i==0)
count++;
}
if(count>1)
cout<<num<<" is not a prime number"<<endl;
else
cout<<num<<" is a prime number"<<endl;
}
else if(num<=0)
cout<<"Positive numbers only!"<<endl;
do
{
cout<<"Try again? [Y/N]";
cin.get(answer);
answer=toupper(answer); //Shifted toupper to after taking input
if(answer=='Y')
break;
if(answer=='N')
return 0;
// break; not needed here, invalidates the purpose of this do-while loop
}while(answer!='Y' && answer!='N'); // Changed logical operator from OR to AND
}while(answer=='Y' || answer=='y');
Но если вы хотите повысить эффективность своего кода, я бы предложилвзглянем на следующий фрагмент кода:
bool again=true;
while(again){
int num;
cout<<"Enter number:"<<endl;
cin>>num;
if(num>0)
{
bool prime=true;
for(int i=2; i<=sqrt(num); i++){ //checking upto square root is sufficient
if(num%i==0){
prime=false;
break;
}
}
if(!prime) cout<<num<<" is not a prime number"<<endl;
else cout<<num<<" is a prime number"<<endl;
}
else cout<<"Positive integers only!"<<endl;
char answer='?';
while(answer!='Y' && answer!='N'){
cout<<"Try again? [Y/N]";
cin.get(answer);
answer=toupper(answer);
if(answer=='Y') again=true;
else if(answer=='N') again=false;
}
}