'my yes\no loop is not working the way it should

I am required to make a program that checks if a number is prime or not. After checking if the number is prime or not the program should ask the user whether they want to check again or not. I am struggling to be able to enter a number after picking the check again option.

here is my code:

#include <iostream>

using namespace std;

int main() {
  int n, i, m = 0, flag = 0;
  char choice;

  cout << "Enter the Number to check: ";
  cin >> n;
  m = n / 2;
  for (i = 2; i <= m; i++) {
    if (n % i == 0) {
      cout << "Number is not Prime." << endl;
      flag = 1;
      break;
    }
  }
  if (flag == 0)
    cout << "Number is Prime." << endl;

  cout << "Execute check again (yes/no): ";
  cin >> choice;
  while (choice == 'yes') {
    cout << "Enter the Number to check: ";
    cin >> n;
    m = n / 2;
    for (i = 2; i <= m; i++) {
      if (n % i == 0) {
        cout << "Number is not Prime." << endl;
        flag = 1;
        break;
      }
    }
    if (flag == 0)
      cout << "Number is Prime." << endl;
  }
  while (choice == 'no') {
    return 0;
  }
}


Solution 1:[1]

This statement

cin >> choice;

reads only one character from the input stream because the variable choice is declared as having the type char

char choice;

But you are trying to compare it with the integer multibyte literal containing two or even three characters

while (choice == 'yes')

//...

while (choice == 'no')

In any case this while loop

    while (choice == 'no')
  {
   return 0;
  }

does not make a sense.

It seems what you need is a do while loop like

#include <string>

//...

std::string choice;

do
{
    int flag = 0;

    cout << "Enter the Number to check: ";

    //...

    std::cout << "Execute check again (yes/no): ";
    std::cin >> choice;
} while ( choice == "yes" );

Pay attention to that your approach incorrectly considers 0 and 1 and any negative number as prime numbers.

Solution 2:[2]

You can use the do while statement for this case, for example:

#include <iostream>

using namespace std;

int main()
{
  do{
    int n, i, m=0, flag=0;
    char choice;

    cout << "Enter the Number to check: ";
    cin >> n;
    m=n/2;
    for(i = 2; i <= m; i++)
    {
        if(n % i == 0)
        {
            cout<<"Number is not Prime."<<endl;
            flag=1;
            break;
        }
    }
  if (flag==0)
    cout << "Number is Prime."<<endl;

  cout << "Execute check again (yes/no): ";
  cin >> choice;
} while (choice == 'yes');

}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Steven Burgos